AC代码:
#include <iostream>
#define Status int
#define QElemType int
#define MaxSize 5
using namespace std;
// 循环队列数据结构
typedef struct
{
QElemType *base; // 存储空间基地址
int front; // 头指针
int rear; // 尾指针
int tag = 0; // 判断队空队满的标志位
}SqQueue;
// 初始化函数
Status InitQueue(SqQueue &Q)
{
Q.base = new QElemType[MaxSize];
if(!Q.base)
{
cout<<"空间分配失败!"<<endl;
return 0;
}
Q.front = Q.rear = 0;
return 1;
}
// 判断队空函数
bool QueueEmpty(SqQueue Q)
{
if(Q.front == Q.rear) // 队空
return true;
else
return false;
}
// 入队函数
bool EnQueue(SqQueue &Q, QElemType e)
{
if(Q.front==Q.rear&Q.tag==1)// 队满,标志位tag 判断
return false;
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1)%MaxSize; // 指针加1,取模
Q.tag = 1;
return true;
}
// 出队函数
bool DeQueue(SqQueue &Q, QElemType &e)
{
if(Q.front==Q.rear&Q.tag==0) // 队空,标志位tag 判断
return false;
e = Q.base[Q.front];
Q.front = (Q.front+1)%MaxSize; // 指针加1,取模;
Q.tag = 0;
return true;
}
// 取队头函数
bool GetHead(SqQueue &Q, QElemType &e)
{
if(Q.front==Q.rear)
return false;
e = Q.base[Q.front];
return true;
}
//***********************************功能实现函数****************************//
// 入队功能函数 调用EnQueue函数
void EnterQueue(SqQueue &Q)
{
int n; QElemType e; int flag;
cout<<"请输入入队元素个数(>=1):"<<endl;
cin>>n;
for(int i = 0; i<n; i++)
{
cout<<"请输入第"<<i+1<<"个元素的值:"<<endl;
cin>>e;
flag = EnQueue(Q, e);
if(flag)
cout<<e<<"已入队"<<endl;
else
{
cout<<"队列已满!"<<endl;
break;
}
}
}
// 出队功能函数 调用DeQueue函数
void OutQueue(SqQueue &Q)
{
int n; QElemType e; bool flag;
cout<<"请输入出队元素个数(>=1):"<<endl;
cin>>n;
for(int i = 0; i<n; i++)
{
flag = DeQueue(Q, e);
if(flag)
cout<<e<<"已出队"<<endl;
else
{
cout<<"队列已空!"<<endl;
break;
}
}
}
// 取队头功能函数 调用GetHead函数
void GetHeadOfQueue(SqQueue Q)
{
QElemType e; bool flag;
flag = GetHead(Q, e);
if(flag)
cout<<"队头元素为:"<<e<<endl;
else
cout<<"队列已空!"<<endl;
}
// 菜单
void menu()
{
cout<<"********1.入队 2.出队********"<<endl;
cout<<"********3.取队头 4.退出********"<<endl;
}
int main()
{
SqQueue Q;
int choice;
InitQueue(Q);
while(1)
{
menu();
cout<<"请输入菜单序号:"<<endl;
cin>>choice;
if(choice==4)
break;
switch(choice)
{
case 1: EnterQueue(Q); break;
case 2: OutQueue(Q); break;
case 3: GetHeadOfQueue(Q); break;
default : cout<<"输入错误!"<<endl;
}
}
return 0;
}