实现循环队列的基本操作。(循环队列最大长度不超过20)
输入若干个整数(以空格分隔,a结束输入),其中0表示做出队操作,不为0的整数为入队元素。
若出队错误输出“error”;
若最后队列为空,则输出“empty”;
若最后队列非空,依次输出队列的全部元素。
问题:输出的全是error,不知道怎么改
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define MAXQSIZE 20
typedef int QElemType; /*队列元素类型*/
typedef struct
{
QElemType *base;
int front;
int rear;
}SqQueue;
/*初始化队列*/
int InitQueue(SqQueue *Q)
{
Q->base=(QElemType *)malloc(MAXQSIZE *sizeof(QElemType));
if(!Q->base)
return ERROR;
Q->front=0;
Q->rear=0;
return OK;
}
/*求队长*/
int QueueLength(SqQueue *Q)
{
int a;
a=(Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;
return a;
}
/*入队*/
int EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear+1)%MAXQSIZE==Q->front)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
/*出队*/
int DeQueue(SqQueue *Q,QElemType *e)
{
if(Q->front==Q->rear)
return ERROR;
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return OK;
}
/*判队空*/
int QueueEmpty(SqQueue *Q)
{
if(Q->front==Q->rear)
return OK;
else
return ERROR;
}
/*取队头*/
int GetHead(SqQueue *Q,QElemType *e)
{
if(Q->front==Q->rear)
return ERROR;
*e=Q->base[Q->front];
return OK;
}
/*销毁队列*/
int DestroyQueue(SqQueue *Q)
{
if(Q->base)
{
Q->rear=Q->front=0;
free(Q->base);
}
return OK;
}
int main()
{
SqQueue q;
int e;
InitQueue(&q);
int i,j;
for(i=0;i<MAXQSIZE;i++)
{
scanf("%d",&e);
if(e='a')
break;
if(e==0)
DeQueue(&q,e);
if(e!=0)
EnQueue(&q,e);
}
if(!DeQueue(&q,e))
{
printf("error");
}
else if(QueueEmpty(&q))
{
printf("empty");
}
else if(!QueueEmpty(&q))
{
for(j=0;j<MAXQSIZE;j++)
{
GetHead(&q,e);
}
}
return 0;
}