简单循环队列模版(数组实现)
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;
}
文件"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;
}
相关文章推荐
- 数据结构学习之路(四)用数组简单实现循环队列
- 简单循环队列(C++模版技术实现)
- 数组实现的简单循环队列
- 简单队列和循环队列的实现--数组实现
- c语言用简单数组实现循环队列
- 简单的双线程数组循环队列缓冲区的实现
- 队列--基于简单循环数组实现(Java)
- 数组实现循环队列
- C实现简单循环队列
- java队列的循环数组实现
- 动态数组实现循环队列
- 数组实现循环队列
- java数据结构与算法之双向循环队列的数组实现方法
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- Java数组实现循环队列
- 用最简单的数组去实现队列
- 无锁队列的实现-循环数组
- 利用循环数组实现的队列
- 循环队列的数组实现
- 循环队列模版(链表实现)