/*#include<iostream>
#define Status int
typedef int QElemType;
using namespace std;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
}LinkQueue; // 链队列
Status InitQueue (LinkQueue &Q)
{ // 构造一个空队列 Q
Q.front = new QNode;
Q.rear =Q.front;
Q.front->next = NULL;
return true;
}
Status DestroyQueue (LinkQueue &Q)
{//销毁队列Q
while (Q.front)
{
Q.rear = Q.front->next;
delete Q.front;
Q.front = Q.rear;
}
return true;
}
Status QueueEmpty (LinkQueue &Q){
return (Q.front==Q.rear);
}
Status EnQueue (LinkQueue &Q,int e){
struct QNode *p;
p = new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return true;
}
Status DeQueue (LinkQueue &Q, QElemType &e)
{
struct QNode *p;
if ( Q.front == Q.rear ) return false;
p = Q.front->next;
e = p->data; // 返回被删元素
Q.front->next = p->next; // 修改头结点指针
if (Q.rear == p) Q.rear = Q.front;
delete p; // 释放被删结点
return true;
}
void show(){
cout<<"****1.构造空队列****"<<endl;
cout<<"****2.销毁队列******"<<endl;
cout<<"****3.判断队列是否为空"<<endl;
cout<<"****4.入队**********"<<endl;
cout<<"****5.出队**********"<<endl;
}
int main()
{
LinkQueue Q;
InitQueue(Q);
int n;
show();
while(1){
cin>>n;
if(n==1){
InitQueue(Q);
}
else if(n==2){
DestroyQueue(Q);
}
else if(n==3){
if(QueueEmpty(Q)){
cout<<"此队列为空"<<endl;
}else
cout<<"此队列不为空"<<endl;
}else if(n==4){
int e;
cin>>e;
EnQueue(Q,e);
}
else if(n==5){
int e;
DeQueue(Q,e);
}
else{
cout<<"操作错误"<<endl;
}
}
return 0;
}
*/
#include<iostream>
#define Status int
#define MAXQSIZE 100
typedef int QElemType;
using namespace std;
typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue;
void show()
{
cout<<"****1.构造空队列****"<<endl;
cout<<"****2.求循环队列长度******"<<endl;
cout<<"****3.进入循环队队**********"<<endl;
cout<<"****4.出循环队列队**********"<<endl;
cout<<"****错误操作**********"<<endl;
}
Status InitQueue (SqQueue &Q)
{//构造一个空队列
Q.base =new QElemType[MAXQSIZE];
Q.front=Q.rear=0;
return true;
}
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 false;
Q.base[Q.rear]=e;
Q.rear = (Q.rear+1) % MAXQSIZE;
return true;
}
Status DeQueue (SqQueue &Q,QElemType &e)
{
if(Q.front==Q.rear) return false;
e=Q.base[Q.front];
Q.front=(Q.front+1) % MAXQSIZE;
return true;
}
int main()
{
SqQueue Q;
show();
int ope;
while(1){
cin>>ope;
if(ope==1){
InitQueue (Q);
}
else if(ope==2){
cout<<"此循环队列的长度为:"<<QueueLength (Q)<<endl;
}
else if(ope==3){
int e;
cin>>e;
if(EnQueue(Q,e)==false){
cout<<"此队列已满"<<endl;
}else{
continue;
}
}
else if(ope==4){
int e;
cin>>e;
if(DeQueue(Q,e)==false){
cout<<"此队列为空"<<endl;
}else{
continue;
}
}
else{
cout<<"此操作错误"<<endl;
}
}
return 0;
}