链队列基本操作
目录
问题描述
完整代码
运行结果
问题描述
【问题描述】
使用带头结点的单链表实现队列,完成该队列的入队、出队、判断队空操作。
【输入形式】
输入若干个整数(以空格分隔),其中0表示做出队操作,不为0的整数为入队元素。
【输出形式】
依次输出队列的全部元素,若队列为空,则输出“empty”
【样例输入1】
1 2 3 4 5 6
【样例输出1】1 2 3 4 5 6
【样例输入2】
1 2 3 0 0 4 0 5
【样例输出2】4 5
【样例输入3】
1 0 2 0 3 0
【样例输出3】empty
【样例输入4】
1 0 2 0 0 3 0 0 0
【样例输出4】empty
【评分标准】
填充函数,实现队列的基本操作,不得增加其他函数。
完整代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>typedef int ElemType;
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode;typedef struct LinkQueue{
QNode* rear;
QNode* front;
}LinkQueue;int InitQueue(LinkQueue *Q)
{
QNode* p=(QNode*)malloc(sizeof(QNode));
if(!p)return 0;
Q->front=Q->rear=p;
p->next=NULL;
return 1;
}int EnQueue(LinkQueue *Q,ElemType e)
{
QNode *q=(QNode *)malloc(sizeof(QNode));
q->data=e;
Q->rear->next=q;
Q->rear=q;
return 1;
}int QueueEmpty(LinkQueue *Q)
{
if(Q->front==Q->rear){
return 1;
}else{
return 0;
}}
int DeQueue(LinkQueue *Q,ElemType *e)
{
if(Q->front==Q->rear){
return 0;
}
*e=Q->front->next->data;
if(Q->front->next==Q->rear){
Q->front->next=NULL;
Q->rear=Q->front;
}else{
Q->front->next=Q->front->next->next;
}
return 1;
}int main()
{
LinkQueue q;
int i;
ElemType x;
InitQueue(&q);
while(scanf("%d",&x)==1)
{
if(x==0)
DeQueue(&q,&x);
else
EnQueue(&q,x);
}
if(QueueEmpty(&q))
printf("empty");
else
while(!QueueEmpty(&q))
{
DeQueue(&q,&x);
printf("%d ",x);
}return 1;
}