循环队列的基本操作(实验)

时间:2025-03-14 09:01:11
#include <iostream> using namespace std; #define ERROR -1 #define OK 1 typedef int QElemType; typedef int Status; //循环队列的存储结构 #define MAXQSIZE 100 //最大队列长度 typedef struct { QElemType *base; //用于动态分配存储空间 int front; //队头索引 int rear; //队尾索引 } SqQueue; //初始化 void InitQueue (SqQueue &Q) { //构造一个空队列 Q.base =new QElemType[MAXQSIZE]; Q.front=Q.rear=0; } //销毁队列 void DestroyQueue(SqQueue &Q) { if(Q.base) free(Q.base); Q.base = NULL; Q.front = Q.rear = 0; } //清空队列 void ClearQueue(SqQueue &Q) { Q.front=Q.rear=0; } //求长度 int QueueLength (SqQueue Q) { return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; } //判空 bool QueueEmpty (SqQueue Q) { return (Q.front==Q.rear); } //求队头元素 Status GetHead (SqQueue Q, QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; return OK; } //循环队列入队 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; } //遍历使队列显示 void DisplayQueue(SqQueue Q) { int i=Q.front; while(Q.front!=Q.rear && (i+MAXQSIZE) % MAXQSIZE != Q.rear) { cout<<Q.base[i]<<endl; i++; } } void show_help() { cout<<"******* Data Structure ******"<<endl; cout<<"1----清空循环队列"<<endl; cout<<"2----判断循环队列是否为空"<<endl; cout<<"3----求循环队列长度"<<endl; cout<<"4----取队头元素"<<endl; cout<<"5----入队"<<endl; cout<<"6----出队"<<endl; cout<<"7----显示队列"<<endl; cout<<" 退出,输入0"<<endl; } int main() { char operate_code; show_help(); SqQueue Q; InitQueue(Q); QElemType e; int i; while(1) { cout<<"请输入操作代码:"; cin>>operate_code; if(operate_code=='1') { cout<<"The queue has been cleared."<<endl; ClearQueue(Q); } else if (operate_code=='2') { if(QueueEmpty(Q)) cout<<"The queue is empty."<<endl; else cout<<"The queue is not empty."<<endl; } else if (operate_code=='3') { cout<<"The length of queue is:"<<QueueLength(Q)<<endl; } else if (operate_code=='4') { cout<<"队头元素为:"<<endl; if(GetHead(Q,e) == 1) cout<<e<<endl; else cout <<"error"<<endl; } else if (operate_code=='5') { cout<<"请输入你想要入队的数:"<<endl; cin>>e; EnQueue(Q,e); } else if (operate_code=='6') { cout<<"出队元素为:"<<endl; if(DeQueue(Q,e)) cout<<e<<endl; } else if (operate_code=='7') { cout<<"The contents of the queue are:"<<endl; DisplayQueue(Q); } else if (operate_code=='0') { break; } else { cout<<"\n操作码错误!!!"<<endl; show_help(); } } //调用销毁栈函数 DestroyQueue(Q); return 0; }