嗨,我是新手学习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");
}
答案 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()并在代码中管理它们。