【问题描述】
用尾指针标识的单循环链表实现队列的基本操作。
【输入形式】
输入若干个整数(以空格分隔,非整数结束输入),其中0表示做出队操作,不为0的整数为入队元素。
【输出形式】
若出队错误输出“error”;
若最后队列为空,则输出“empty”;
若最后队列非空,依次输出队列的全部元素。
【样例输入1】
1 0 2 0 0 3 0 0 0 a
【样例输出1】
error
【样例输入2】
1 0 2 0 3 0 a
【样例输出2】
empty
【样例输入3】
1 2 3 0 0 4 0 5 a
【样例输出3】
4 5
【评分标准】
补充代码完成程序功能,不得修改程序中其他函数。
#include
#include
#includetypedef int ElemType;
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode;
/*初始化队列*/
int InitQueue(QNode **rear)
{
QNode* p=(QNode*)malloc(sizeof(QNode));
if(!p)return 0;
p->next=p;
*rear=p;
return 1;
}
/*入队*/
int EnQueue(QNode **rear,ElemType e)
{
QNode *p=*rear;
while(p->next!=*rear){
p=p->next;
}
QNode *q=(QNode*)malloc(sizeof(QNode));
q->data=e;
q->next=*rear;
p->next=q;
return 1;
}/*判断队列是否为空*/
int QueueEmpty(QNode *rear)
{
if(rear->next==rear) return 1;
else return 0;
}
/*出队*/
int DeQueue(QNode **rear,ElemType *e)
{
if(QueueEmpty(*rear)==1) return 0;
QNode *q=(*rear)->next;
(*rear)->next=q->next;
*e=q->data;
free(q);
return 1;
}int main()
{
QNode *q;
ElemType e;
InitQueue(&q);
while(scanf("%d",&e)==1)
{
if(e)
{
EnQueue(&q,e);
}
else
{
if(QueueEmpty(q))
{
printf("error");
return 0;
}
else
{
DeQueue(&q,&e);
}
}
}
if(QueueEmpty(q))
printf("empty");
else
{
while(!QueueEmpty(q))
{
DeQueue(&q,&e);
printf("%d ",e);
}
}
return 1;
}