您的位置:首页 > 其它

简单循环队列模版(数组实现)

2011-07-18 17:48 711 查看
用数组写的一个循环队列的模版,功能是常用的那几个功能。
文件"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;
}
};

测试代码"main.cpp"#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delete 测试