实现无头结点链队列的基本操作。
2023-04-12
【问题描述】
实现无头结点链队列的基本操作。
【输入形式】
输入若干个整数(以空格分隔),其中0表示做出队操作,不为0的整数为入队元素。
【输出形式】
若出队错误输出“error”;
若最后队列为空,则输出“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】
error
#include
#include
typedef int ElemType;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*QList;
typedef struct Queue
{
QList front;
QList rear;
}Queue;
int initQueue(Queue *Q);
int queueEmpty(Queue *Q);
int enQueue(Queue *Q,ElemType e);
int deQueue(Queue *Q,ElemType *e);
int queueLength(Queue *Q);
int getHead(Queue *Q,ElemType *e);
/*构造一个空队列*/
int initQueue(Queue *Q)
{
Q->front=Q->rear=NULL;
return 1;
}
/*入队操作*/
int enQueue(Queue *Q,ElemType e)
{
QList q=(QNode *)malloc(sizeof(QNode));
if(!q)
return 0;
q->data=e;
q->next=NULL;
if(Q->front==NULL&&Q->rear==NULL)
{
Q->front=q;
Q->rear=q;
}
else
{
Q->rear->next=q;
Q->rear=q;
}
return 1;
}
/*出队操作*/
int deQueue(Queue *Q,ElemType *e)
{
QList s=Q->front;
if(Q->front==NULL&&Q->rear==NULL)
return 0;
*e=(Q->front->data);
if(Q->front==Q->rear&&Q->front!=NULL)
{
free(s);
Q->front=NULL;
Q->rear=NULL;
}
else{
Q->front=Q->front->next;
free(s);
}
return 1;
}
/*返回队列的长度*/
int queueLength(Queue *Q)
{
int n=0;
QList p=Q->front;
while(p)
{
n++;
p=p->next;
}
return n;
}
/*判断队列是否为空*/
int queueEmpty(Queue *Q)
{
if(Q->front==Q->rear&&Q->front==NULL)
return 1;
else
return 0;
}
/*取队头元素*/
int getHead(Queue *Q,ElemType *e)
{
if(!Q->front)
return 0;
*e=Q->front->data;
return 1;
}
int main()
{
Queue q;
int e;
initQueue(&q);
while(scanf("%d",&e)==1)
{
if(e)
{
if(!enQueue(&q,e))
{
break;
}
}else
{
if(!deQueue(&q,&e))
{
printf("error\n");
return 0;
}
}
}
if(queueEmpty(&q))
{
printf("empty\n");
}else
{
while(deQueue(&q,&e))
{
printf("%d ",e);
}
}
return 0;
}
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com



