如何用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 %dn", i, queue->items[ i ] );
}

不过,需要注意的是,在队列的实现中实际上会出现一些错误。您应该在Enqueue函数中增加队列的大小(您没有这样做)。要修复此问题,请在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]);
}

最新更新