用数组写的一个循环队列的模版,功能是常用的那几个功能。
文件"myqueue.h"
#define QUEUE_INIT_SIZE 100 //队列初始化时分配的最大容量 #define QUEUE_INCREMENT 10 //队列满时,扩充的容量 #include<iostream> using namespace std; template<class T> class My_queue { private: T *elem; int head; //头 int rear; //尾 int queue_size; //队列容量 int increment_size; //每次扩充容量 public: My_queue(int maxsize=QUEUE_INIT_SIZE,int incresize=QUEUE_INCREMENT) { elem=new T[maxsize]; head=0; rear=0; queue_size=maxsize; increment_size=incresize; } void Increment_Queue() //对队列进行扩充,并将原队列内容全部复制 { T *a; a=new T[queue_size+increment_size]; for(int i=0;i<queue_size;i++) a[i]=elem[i]; delete[]elem; elem=a; head=0; rear=queue_size-1; queue_size+=increment_size; delete[]a; } bool empty() { return (rear==head); } int size() { int length=0; length=(rear-head+queue_size)%queue_size; return length; } void push(T data) { if( (rear+1)%queue_size==head )//判断循环队列是否满的条件 Increment_Queue(); elem[rear]=data; rear=(rear+1)%queue_size; } T front() { if(empty()) { cout<<"queue is empty."<<endl; exit(0); } T data=elem[head]; return data; } T back() { if(empty()) { cout<<"queue is empty."<<endl; exit(0); } int pos=(rear-1)%queue_size; T data=elem[pos]; return data; } void pop() { head=(head+1)%queue_size; } void clean() { delete[]elem; } };
#include"myqueue.h" int main() { My_queue<char> q; if(q.empty()) cout<<"queue is empty!"<<endl; q.push('L'); q.push('O'); q.push('V'); q.push('E'); cout<<"queue's size is : "<<q.size()<<endl; cout<<"queue's last element is : "<<q.back()<<endl; q.push('U'); cout<<"Now queue's size is : "<<q.size()<<endl; while(!q.empty()) { cout<<q.front(); q.pop(); } cout<<endl; cout<<q.size()<<endl; return 0; }