数据结构循环队列{顺序表示}
为什么如下代码运行后,界面一闪而过,不能停留。另外运行到红色部分(第二次调用length)的时候为什么长度还是显示为0,怎么让它能显示重新插入数据后的长度
#include<stdio.h>
#include<stdlib.h>
typedef int QElemType;
typedef int Status;
#define ok 1
#define error -2
typedef struct
{
QElemType *base;
int front;
int rear;
int emptyflag;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=(QElemType*)malloc(100*sizeof(QElemType));
if(!Q.base) exit(-1);
Q.front=Q.rear=0;
Q.emptyflag=1;
return ok;
}
int QueueLength(SqQueue Q)
{
if(Q.emptyflag) return 0;
else if(Q.front==Q.rear) return 100;
else return(Q.rear-Q.front+100)%100;
}
Status EnQueue(SqQueue &Q,QElemType f)
{
if(Q.emptyflag) Q.emptyflag=0;
else if(Q.front==Q.front) return error;
Q.base[Q.rear]=f;
Q.rear=(Q.rear+1)%100;
return ok;
}
Status GetHead(SqQueue Q,QElemType &e)
{
if(Q.emptyflag) return error;
else e=Q.base[Q.front];
return ok;
}
Status DeQueue(SqQueue &Q,QElemType &g)
{
if(Q.emptyflag) return error;
g=Q.base[Q.front];
Q.front=(Q.front+1)%100;
if(Q.front==Q.rear) Q.emptyflag=1;
return ok;
}
void main()
{
int i;
QElemType e,f,g;
SqQueue Q;
InitQueue(Q);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
for(i=1;i<=5;i++){
scanf("%d",&f);
EnQueue(Q,f);
}
GetHead(Q,e);
printf("%d\n",e);
DeQueue(Q,g);
printf("%d\n",g);
QueueLength(Q);
printf("%d\n",QueueLength(Q));}