//循环队列---队列的顺序表示和实现
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXQSIZE 50 //最大队列长度
typedef int QElemType; //数据元素类型
typedef int Status; //函数结果状态类型
typedef struct
{
QElemType *base;
int front,rear;
}SqQueue;
Status InitQueue(SqQueue &Q)
{//构造一个空队列Q
Q.base = (QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base)
exit(OVERFLOW);
Q.front = Q.rear = 0;
return OK;
}
Status EnQueue(SqQueue &Q,QElemType e)
{//插入元素e为Q的新的队尾元素
if((Q.rear + 1)%MAXQSIZE == Q.front)
return ERROR; //队列满
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1)%MAXQSIZE;
return OK;
}
int QueueLength(SqQueue Q)
{//返回Q的元素的个数,即队列的长度
return(Q.rear - Q.front + MAXQSIZE)%MAXQSIZE;
}
Status DeQueue(SqQueue &Q,QElemType &e)
{//删除队列的头元素,用e返回其值
if(Q.front == Q.rear)
return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXQSIZE;
return e;
}
int main()
{
SqQueue q;
int i,e,n;
//调用InitQueue(SqQueu &Q)函数,创建一个空队列
InitQueue(q);
printf("队列已创建好...");
printf("
");
//调用EnQueue(SqQueue &Q,QElemType e)函数,插入元素e为Q的队尾元素
/*
printf("Please input a integer number:(ending 9999)");
scanf("%d",&e);
while(e!=9999)
{
EnQueue(q,e);
printf("Please input a integer number:(ending 9999)");
scanf("%d",&e);
}
printf("
");
*/
//调用EnQueue(SqQueue &Q,QElemType e)函数,插入元素e为Q的队尾元素
printf("请输入要入队列的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Please input a number:");
scanf("%d",&e);
EnQueue(q,e);
}
printf("
");
//调用QueueLength(SqQueue Q)函数,输出当前队列中元素的个数
printf("队列中的元素个数为:%d",QueueLength(q));
printf("
");
//调用DeQueu(SqQueue &Q,QElemType &e)函数,删除队头的元素
printf("被删除的队头元素是:%d",DeQueue(q,e));
printf("
");
//调用QueueLength(SqQueue Q)函数,输出当前队列中元素的个数
printf("队列中的元素个数为:%d",QueueLength(q));
printf("
");
return 0;
}