#include
using namespace std;
//顺序存储的循环队列
const int maxsize=5;
class cir_queue{//Circular queue 循环队列
public:
int data[maxsize];
int front;
int rear;
cir_queue(const int temp[],int num1);//创建一个队列
void show();//查看对头元素
void in_queue(int e);//入队
int out_queue();//出队
int length();//求队列长度
};
cir_queue::cir_queue(const int temp[],int num1){
for(int p=0;p){
data[p]=temp[p];
if(p==0){
front=p;
rear=p;
}
rear=p+1;
}
}
void cir_queue::show(){
if(front==rear){//队空的判断
cout<<"此时为空队列"<<endl;
return;
}
cout<<"对头元素为"<endl;
}
void cir_queue::in_queue(int e){//入队
if((rear+1)%maxsize==front){//队满的判断 此处存在数组溢出问题1
cout<<"队列已满"<<endl;
return;
}
data[rear]=e;
rear=(rear+1)%maxsize;
}
int cir_queue::out_queue(){//出队 返回出队元素
if(front==rear){
cout<<"队列为空"<<endl;
return 0;
}
int e=data[front];
front=(front+1)%maxsize;
return e;
}
int cir_queue::length(){//返回队列长度
return (rear-front+maxsize)%maxsize;
}
int main(){
int arr[maxsize];
int num,k;
cout<<"输入创建顺序存储的循环队列的大小"<<endl;
cin>>num;
if(num>=maxsize){
cout<<"输入不合法"<<endl;
return 0;
}
for(int j=0;j){
cout<<"输入第"<1<<"个元素的值"<<endl;
cin>>k;
arr[j]=k;
}
cir_queue q1(arr,num);
//q1.in_queue(100);
int n=q1.out_queue();
cout<<"出队的元素为"<endl;
cout<<"队列长度为"<endl;
q1.show();
return 0;
}
/*
数组溢出问题:
此时的队列结构为 front指向队头元素,rear指向队尾元素的下一位,也就是此元素数组下标的下一位
对于数组来说 总有一个下标的空间是不能被赋值的
设计这样结构好处为: 判断队空(front==rear)和队满((rear+1)%maxsize==front)简单易区分
缺点为:如果数组的最大容量(maxsize)较小的话,此时的循环队列不要也罢
*/