/*2. 完成对循环队列结构的定义,以及对循环队列的各种基本运算的实现(每种基本运算用一个函数来实现)。
基本运算包括:
初始化Init_sqqueue运算、
判队空Empty_sqqueue运算、
入队En_sqqueue运算、
出队De_sqqueue运算、
取队头元素Gethead_sqqueue运算。*/
#include<iostream>
using namespace std;
typedef char datatype;
const int maxsize=100; //队列的容量,元素最多不能超过它
typedef struct
{
datatype data[maxsize]; //用数组实现
int front,rear;
} sqqueue; //顺序队列类型
//初始化
void Init_sqqueue(sqqueue *sq)
{
sq->front=sq->rear=0;
}
//判队空
int Empty_sqqueue(sqqueue *sq)
{
if(sq->rear==sq->front) return 1;
else return 0;
}
//取队头
int Gethead_sqqueue(sqqueue *sq,datatype *x)
{
if(sq->front=sq->rear) { cout<<"队空,无队头可取!\n";return 0;}
else {
*x=sq->data[(sq->front+1)%maxsize];
return 1;
}
}
//入队
int En_sqqueue(sqqueue *sq,datatype x)
{
if((sq->rear+1)%maxsize==sq->front)
{
cout<<"队满,不能入队!\n"; return 0;
}
sq->rear=(sq->rear+1)%maxsize;
sq->data[sq->rear]=x;
return 1;
}
//出队
int De_sqqueue(sqqueue *sq,datatype *x)
{
if(sq->rear==sq->front)
{ cout<<"队空,不能出队!\n";return 0;}
else
{
sq->front=(sq->front+1)%maxsize;
*x=sq->data[sq->front];
return 1;
}
}
void Display(sqqueue *sq)
{
if(Empty_sqqueue(sq))
{ cout<<"队空,无数据输出!\n";}
else
cout<<"队列的所有元素:"<<endl;
for(int i=sq->front+1;i<=sq->rear;i++)
cout<<sq->data[i]<<" ";
}
int main()
{
sqqueue *Sq=new sqqueue;
Init_sqqueue(Sq);
char choice,y;
char *S;
S=&y;
int flag = 1;
while(flag)
{
cout<<"------------------循环队列---------------------"<<endl;
cout<<" 1. 入队 "<<endl;
cout<<" 2. 出队 "<<endl;
cout<<" 3. 取队头元素 "<<endl;
cout<<" 4. 判断队是否为空 "<<endl;
cout<<" 5. 浏览队列所有元素(测试用) "<<endl;
cout<<" 6. 退出 "<<endl;
cout<<"------------------------------------------------"<<endl;
cout<<"请选择:";
cin>>choice;
switch(choice)
{
case '1': cout<<"请输入一个需要入队的字符"<<endl;
cin>>y;
if(En_sqqueue(Sq,y))
cout<<"入队成功"<<endl;
else
cout<<"入队失败!"<<endl;
break;
case '2': if(De_sqqueue(Sq,S))
cout<<"出队成功,出队的元素是:"<<y<<endl;
else
cout<<"出队失败!"<<endl;
break;
case '3': if(Gethead_sqqueue(Sq,S))
cout<<"取队列头元素成功,出队的元素是:"<<y<<endl;
else
cout<<"取队头元素失败!"<<endl;
break;
case '4': if(Empty_sqqueue(Sq))
cout<<"此时队为空。"<<endl;
else
cout<<"此时队不为空。"<<endl;
break;
case '5': Display(Sq);
cout<<endl;
break;
case '6': flag=0;
break;
default : cout<<"输入错误,请重新选择。"<<endl;
}
}
return 0;
}