如何初始化和测试在C中使用结构的队列?

时间:2014-02-13 05:02:13

标签: c queue

嗨,我是新手学习C(来自java)。我写了一个queue.c,但我不知道如何在main()函数中测试它。我的主要问题是我只是不熟悉语法(即如何初始化队列?如何从中获取enq / deq以及打印解决方案的格式)。这是迄今为止的代码:

#include <stdio.h>

#define MAX_QUEUE_SIZE 100;

typedef struct queue {
    int queue[MAX_QUEUE_SIZE];
    int currSize;
    int head;
    int tail;
} queue;

void initQueue(queue *queue) {
    queue->currSize = 0;
    queue->pos = 0;
    queue->head = 0;
    queue->tail = 0;
}

void enqueue(queue *queue, int e) {
    if (isFull()) printf("Queue is full!");

    queue->queue[queue->tail] = e;
    queue->tail = (queue->tail + 1) % MAX_QUEUE_SIZE;
    q->currSize = q->currSize + 1;
}

int dequeue(queue *queue) {
    if (isEmpty()) printf("Queue is empty!");

    int toDequeue = queue->head;
    queue->head = (queue->head + 1) % MAX_QUEUE_SIZE;
    q->currSize = q->currSize - 1;

    return toDequeue;
}

int isEmpty(queue *queue) {
    return (queue->head == queue->tail);
}

int isFull(queue *queue) {
    return (currSize == MAX_QUEUE_SIZE);
}

int main() {
    /* how do I initialize the queue and enq/deq to test? */
    printf("Hello World!\n");
}

2 个答案:

答案 0 :(得分:2)

好吧,既然你想测试它,只需在堆栈上创建队列然后开始调用函数。

int main()
{
 queue q;
initqueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
}

或者,在堆上分配它:

int main()
{
 queue *q = malloc(sizeof(queue));
 assert(q != NULL);
 initqueue(q);
 enqueue(q, 1);
 enqueue(q, 2);
}

另请注意,由于您使用类型名称作为变量名称,因此可能会遇到麻烦。

答案 1 :(得分:0)

如果您要编写GNU / Linux或任何POSIX兼容的操作系统,则应考虑使用Sys V Message Que或命名或未命名的管道作为Que。请参阅msgsnd(),msgrcv(),popen(),read(),write(),pclose(),pipe()的手册页。

在Java中,您可以避免创建自己的Que类,而是使用内置的Que类Java。同样,最好使用msq que或named / unnamed管道作为Que而不是malloc()并在代码中管理它们。