【发布时间】:2023-04-04 03:00:02
【问题描述】:
我正在尝试使用代码块学习 C,我的部分任务是使用队列作为输入和输出方法。
#include <stdio.h>
#include <stdlib.h>
typedef struct QUEUE {
int head, tail;
int list[4];
} queue;
void create( queue *q ) {
q->head = 0;
q->tail = 0;
}
int empty( queue *q ) {
if ( q->tail == 0 )
return 1;
else
return 0;
}
int full( queue *q ) {
if ( q->tail == 4 )
return 1;
else
return 0;
}
void enqueue( queue *q ) {
int i, data;
if ( full( q ) == 1 )
printf( "\nQueue is Full" );
else {
printf( "\nEnqueue Integer : " );
scanf( "%d", &data );
q->list[q->tail] = data;
q->tail++;
}
}
void dequeue( queue *q ) {
int i;
if ( empty( q ) == 1 )
printf( "\n Queue is Empty" );
else
q->head++;
}
void main( ) {
int select;
queue q;
create( &q );
while ( 1 ) {
printf( "\n1->Enqueue \t 2->Dequeue \t 3->Exit: " );
scanf( "%d", &select );
switch ( select ) {
case 1: enqueue( &q );
break;
case 2: dequeue( &q );
break;
default: goto out;
}
}
out:
exit( EXIT_SUCCESS );
}
这是我的代码,出队函数返回队列一开始是空的,但是在我入队一个整数后,它根本不会出队。谢谢你的帮助。我正在使用代码块来编译我的程序。
【问题讨论】:
-
您对
dequeue有什么期望?也许将其重置为原始状态? -
可以,但是如果队列已满,出队功能将不起作用。
-
你是说一旦你
enqueue一个值,使用dequeue两次不会打印“队列为空”? -
投票结束。你还没有告诉你的代码应该做什么,所以我们不能帮助修复它。
-
此代码中没有正确使用尾部成员或头部成员。它缺少必要的代码来管理头部和尾部之间的差异以确定完整、空和元素数信息。