用数组写的一个循环队列的模版,功能是常用的那几个功能。
文件"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;
}
本文介绍了一种使用数组实现的循环队列模板,包括基本操作如入队、出队等,并通过示例代码展示了其使用方法。

被折叠的 条评论
为什么被折叠?



