/***循环队列基本操作***/
#include<iostream><img src="https://img-blog.youkuaiyun.com/20141024134125207?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDc5NTc2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
using namespace std;
#define MAXQSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int QElemType;
typedef int Status;
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
//初始化
Status InitQueue(SqQueue &Q)
{
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) return OVERFLOW;
Q.front=Q.rear=0;
return OK;
}
//求队列长度
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
//入队
Status 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;
}
//出队
Status 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 main()
{
SqQueue q;
QElemType e;
cout<<"进循环队列的元素依次为:"<<endl;
if(InitQueue(q))
{
for(int i=1;i<=12;i++)
{
EnQueue(q,i);
cout<<i<<" ";
}
}
cout<<endl;
cout<<"队列的长度为:\n";
cout<<QueueLength(q)<<endl;
cout<<"出循环队列的元素依次为:"<<endl;
while(DeQueue(q,e))
{
cout<<e<<" ";
}
cout<<endl;
return 0;
}