您的位置:首页 > 编程语言 > C语言/C++

顺序队列模板--c++实现

2016-09-30 12:04 507 查看
//顺序队列类的实现
#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
using namespace std;
template<class elemType>
class queue{
public:
virtual bool isEmpty()=0;
virtual void enQueue(const elemType &x)=0;
virtual elemType deQueue()=0;
virtual elemType getHead()=0;
virtual ~queue(){}
};

template<class elemType>
class seqQueue:public queue<elemType>{
private:
elemType *elem;
int maxSize;
int front,rear;
void doubleSpace();
public:
seqQueue(int size=10){
elem=new elemType[size];
maxSize=size;
front=rear=0;
}
~seqQueue(){
delete[] elem;
}
bool isEmpty(){
return front==rear;
}
void enQueue(const elemType &x);
elemType deQueue();
elemType getHead(){
return elem[(front+1)%maxSize];
}
};

template<class elemType>
void seqQueue<elemType>::doubleSpace(){
elemType *tmp=elem;
elem=new elemType[2*maxSize];
for(int i=1;i<maxSize;i++){
elem[i]=tmp[(front+i)%maxSize];
}
front=0;
rear=maxSize;
maxSize*=2;
delete[] tmp;
}

template<class elemType>
void seqQueue<elemType>::enQueue(const elemType&x){
if((rear+1)%maxSize==front)doubleSpace();
rear=(rear+1)%maxSize;
elem[rear]=x;
}

template<class elemType>
elemType seqQueue<elemType>::deQueue(){
front=(front+1)%maxSize;
return elem[front];
}

int main(int argc, char const *argv[]){
seqQueue<int> seq(3);
if(seq.isEmpty()){
cout<<"queue is empty!"<<endl;
}
seq.enQueue(1);
seq.enQueue(2);
seq.enQueue(3);
cout<<seq.getHead()<<endl;
seq.deQueue();
cout<<seq.getHead()<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构