源代码
#include <iostream>
using namespace std;
template<class T>
class queue{
public:
queue(int init=10){
Queue = new T[init];
maxlength = init;
front = back = 0;
}
~queue(){
delete []Queue;
}
bool empty(){
return front==back;
}
T& top(){
return getFront();
}
T& getFront(){
if(empty())cout<<"队列为空"<<endl;
return Queue[(front+1)%maxlength];
}
T& getBack(){
if(empty())cout<<"队列为空"<<endl;
return Queue[back];
}
void push(const T& element){
if((back+1)%maxlength==front){
T* newQueue = new T[maxlength*2];
int start = (front+1)%maxlength;
if(start<2){
copy(Queue+start,Queue+start+maxlength-1,newQueue);
}else{
copy(Queue + start, Queue + maxlength, newQueue);
copy(Queue, Queue + back + 1, newQueue + maxlength - start);
}
delete []Queue;
Queue = newQueue;
back = maxlength-2;
maxlength*=2;
front = maxlength-1;
}
back=(back+1)%maxlength;
Queue[back]=element;
}
void pop(){
if(empty())cout<<"队列为空"<<endl;
front = (front+1)%maxlength;
Queue[front].~T();
}
int size(){
return (back-front+maxlength)%maxlength;
}
int capaity(){
return maxlength;
}
private:
T* Queue;
int maxlength;
int front;
int back;
};
int main(){
queue<int> q(3);
q.push(1);
q.push(2);
cout<<"queue size is "<<q.size()<<endl;
cout<<"queue capaity is "<<q.capaity()<<endl;
q.push(3);
q.push(4);
cout<<"queue size is "<<q.size()<<endl;
cout<<"queue capaity is "<<q.capaity()<<endl;
while(q.empty()==false){
cout<<q.top()<<endl;
q.pop();
}
}
输出结果
queue size is 2
queue capaity is 3
queue size is 4
queue capaity is 6
1
2
3
4
应用