簡體   English   中英

如何在C中打印隊列[數據結構]?

[英]how to print a queue[data structure] in C?

我具有這些結構,我想編寫一個主要函數來進行一些測試,但是:1-如何打印此隊列? 2-如何更深入地入隊? 喜歡,帶有“ for”?

我不是想在這里回答作業(在有人這樣說之前)。 我有一個測試,所以我只是想學習如何做,如果有人可以幫助我,我將非常感激。

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10


typedef struct Queue{
    int size;
    int first;
    int last;
    int items[MAX_SIZE];
} Queue;

Queue* createQueue() {
    Queue *queue = (Queue*)malloc(sizeof(Queue));
    queue->size = 0;
    queue->first = 0;
    queue->last = MAX_SIZE - 1;

    return queue;
}

Enqueue(Queue *queue, int item) {
    if(queue->size >= MAX_SIZE) {
        printf("Queue is full!");
    }

    else {
        queue->last = (queue->last + 1) % MAX_SIZE;
        queue->items[queue->last] = item;
        queue->size++;
    }
}

Dequeue(Queue *queue) {
    if(queue->size <= 0) {
        printf("Queue is empty!");
    }

    else {
        queue->first = (queue->first + 1) % MAX_SIZE;
        queue->size--;
    }
}

int main {

    int i;

    Queue *queue = createQueue();

    Enqueue(queue, 1);
    Enqueue(queue, 5);
    Enqueue(queue, 8);
    Enqueue(queue, 9);

    for(i = 0; i <= MAX_SIZE; i++) {  // Is this "for" right?
        printf("%d ", queue-> ????)  // Don't know what to put here to print right
    }

    return 0;
}

由於您正在使用數組,因此可以按照以下步驟進行操作:

for ( int i = 0; i < queue->size; i++ ) {
  printf( "item at position %d is %d\n", i, queue->items[ i ] );
}

但是,重要的是,隊列的實現實際上有一些錯誤。 您應該在Enqueue函數中增加隊列的大小(不是)。 要解決此問題,請在else條件的某處添加以下else

queue->size += 1;

...此外,您還應該減小Dequeue函數的大小,方法如下:

queue->size -= 1;

...此外,根據實現隊列的方式,當創建隊列時,該隊列應該為空,因此正反是NULL指針(如果使用鏈接列表),因此對於數組,應為-1,以表示一個空隊列。 您的createQueue函數應如下所示:

Queue* createQueue() {
    Queue *queue = (Queue*)malloc(sizeof(Queue));
    queue->size = 0;
    queue->first = -1;
    queue->last = -1;

    return queue;
}

...進行更改將迫使您更改EnqueueDequeue函數以分別正確處理空隊列。 另外,您應該創建一個destroyQueue函數來清理您分配的所有內存(在這種情況下只有一次)。 總而言之,需要更改很多才能使此隊列正常工作。 由於這是一項家庭作業,因此我將由您自己決定。

替代工具:

我建議您探索如何使用動態數組或鏈表實現隊列。 使用固定大小的數組實際上是沒有用的……(但要介紹一下)。 探索“動態”內存分配和內存池,或更常見的稱為堆。

不過干得好,我希望你正在學習!

/*Affichage*/
void affiche(struct file* f)
{
    int j;
    int taille=(f->ar-f->av)+1;
    for(j=f->av; j < taille; j++)
        printf("%d \n", f->tab[f->av]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM