线性表-队列-数组
作者:互联网
完整代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
const int queuesize=100;
template<class datatype>
class cirqueue{
private:
datatype *data;
int front;
int rear;
int Msize;
int num;
public:
cirqueue();
cirqueue(int size);
~cirqueue();
bool push(datatype x);
bool pop(int *item);
bool getfront(int *item);
bool isempty();
bool isfull();
};
//不含传值的构建函数
template<class datatype>
cirqueue<datatype>::cirqueue(){
front=-1;
rear=front;
Msize=queuesize;
num=0;
data=new datatype[Msize];
}
//含传值的构建函数
template<class datatype>
cirqueue<datatype>::cirqueue(int size){
front =-1;
rear=front;
num=0;
Msize=size;
data=new datatype[Msize];
}
//析构函数
template<class datatype>
cirqueue<datatype>::~cirqueue(){
delete data;
}
//入队列
template<class datatype>
bool cirqueue<datatype>::push(datatype x){
if(num==Msize){
cout<<"溢出"<<endl;
return false;
}else {
rear=(rear+1)%Msize; //避免假性溢出
data[rear]=x;
num++;
return true;
}
}
//出队列
template<class datatype>
bool cirqueue<datatype>::pop(int *item){
if(num==0){
cout<<"空队"<<endl;
return false;
}else{
front=(front+1)%Msize;
*item=data[front];
return true;
}
}
//提取最上面的数据,用指针的方式传值进来
template<class datatype>
bool cirqueue<datatype>::getfront(int *item){
int *i;
if(num==0){
cout<<"空队"<<endl;
return false;
}else{
i=(front+1)%Msize; //与出队列不同的是这里front并没有移动
*item=data[i];
return true;
}
}
int main(){
cirqueue<int> s(5);
int x;
int i;
// 不能s.cirqueue(5),要在初始化的时候为其定义大小
for(i=0;i<5;i++){
cin>>x;
s.push(x);
}
int a;
for(i=0;i<5;i++){
s.pop(&a);
cout<<a<<endl;
}return 0;
}
标签:cirqueue,线性表,队列,Msize,int,num,bool,数组,front 来源: https://blog.csdn.net/Yuban_Pian/article/details/114876317