其他分享
首页 > 其他分享> > 线性表-队列-数组

线性表-队列-数组

作者:互联网

完整代码:

#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