如何在C中打印队列[数据结构]?

U23*_*23r 2 c queue data-structures

我有结构,我想编写一个主函数来做一些测试,但是: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;
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 5

由于您使用的是数组,因此可以按如下方式完成:

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

但重要的是,您实际上在队列的实现中存在一些错误.您应该增加Enqueue函数中队列的大小(您不是).要解决此问题,请在else条件中添加以下内容:

queue->size += 1;
Run Code Online (Sandbox Code Playgroud)

...你也应该减少你的Dequeue功能的大小,完成如下:

queue->size -= 1;
Run Code Online (Sandbox Code Playgroud)

...另外,根据你实现队列的方式,当你创建一个队列时,它应该是空的,因此前面和后面是NULL指针(如果使用链表),因此对于一个数组应该是-1,表示一个空队列.你的createQueue功能应如下:

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

    return queue;
}
Run Code Online (Sandbox Code Playgroud)

...进行更改将强制您更改您的EnqueueDequeue函数以分别正确处理空队列.此外,您应该创建一个destroyQueue函数来清理您分配的所有内存(在这种情况下只清理一次).总之,需要更改批次以使此队列正常工作.由于这是一项家庭作业,我会留给你.

替代工具:

我建议您探索如何使用动态数组或链表实现队列.使用固定大小的阵列实际上是无用的......(但是公平的介绍).探索"动态"内存分配和内存池,或者更常见的称为堆.

虽然很棒,但我希望你在学习!