顺序存储的循环队列(c++实现)
#include<iostream> 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<num1;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<<"对头元素为"<<data[front]<<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<num;j++){ cout<<"输入第"<<j+1<<"个元素的值"<<endl; cin>>k; arr[j]=k; } cir_queue q1(arr,num); //q1.in_queue(100); int n=q1.out_queue(); cout<<"出队的元素为"<<n<<endl; cout<<"队列长度为"<<q1.length()<<endl; q1.show(); return 0; } /* 数组溢出问题: 此时的队列结构为 front指向队头元素,rear指向队尾元素的下一位,也就是此元素数组下标的下一位 对于数组来说 总有一个下标的空间是不能被赋值的 设计这样结构好处为: 判断队空(front==rear)和队满((rear+1)%maxsize==front)简单易区分 缺点为:如果数组的最大容量(maxsize)较小的话,此时的循环队列不要也罢 */
版权声明:本文为dageng2844原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。