C++基于模版的循环队列实现
来源:互联网 发布:发廊手机收银软件 编辑:程序博客网 时间:2024/04/28 16:16
近期因为要反反复复使用队列,而队列需要保存的元素格式又千差万别,在网上搜了下貌似双边队列可以解决这个问题,但是效率有点低。于是自己写了个基于模版的循环队列实现方式,有任何不合理之处还请各位大牛轻怕。
#pragma once
template<class T> // Template declaration
class CQueue
{
public:
CQueue(void);
CQueue(int num);
~CQueue(void);
private:
unsigned int rear,front,maxsize,currentcout;
T* elements;
public:
int Add(T element);
T* FetchElement();// get current element and delete it form the queue
T* ProbeElement();// get current element and retain it form the queue
int Delete();
int IsEmpty();
int IsFull();
void InitElements();
int InitElements(int num);
void Destroy();
};
template<class T>
CQueue<T>::CQueue(void)
{
}
template<class T>
CQueue<T>::~CQueue(void)
{
if (elements)
{
delete []elements;
}
}
template<class T>
CQueue<T>::CQueue(int num)
{
elements = new T[num];
rear=front=0;
maxsize = num;
currentcout = 0;
}
template<class T>
int CQueue<T> ::Add(T element)
{
if(currentcout!=maxsize)//((rear+1)%N!=front)
{
elements[rear]=element;
rear=(rear+1)%maxsize;
currentcout++;
}
else
return -1;
return 0;
}
template<class T>
int CQueue<T>::Delete()
{
if(currentcout == 0)
return -1;
else
{
front=(front+1)%N;
currentcout--;
}
return 0;
}
template<class T>
T* CQueue<T>::FetchElement()
{
T*temp = NULL;
if(currentcout==0)
{
return NULL;
}
else
{
temp = &elements[front];
front=(front+1)%maxsize;
currentcout--;
}
return temp;
}
template<class T>
T* CQueue<T>::ProbeElement()
{
if(currentcout==0)
return NULL;
else
return &elements[front];
}
template<class T>
int CQueue<T>::IsEmpty()
{
return currentcout == 0;
}
template<class T>
int CQueue<T>::IsFull()
{
return currentcout == maxsize;
}
/*
- using for init elements when you do not want to destroy CQeue object
but want to give up elements already stored
*/
template<class T>
void CQueue<T>::InitElements()
{
rear = front = 0;
currentcout = 0;
}
/*
- using for init elements when you want to destroy current memory used for store elements
and allocate a new memory area with length num
*/
template<class T>
int CQueue<T>::InitElements(int num)
{
if (elements)
{
delete elements;
}
try{
elements = new T[num];
rear = front = 0;
currentcout = 0;
maxsize = num;
return 0;
}
catch( const bad_alloc& e ){
(void )e;
return -1;
}
}
template<class T>
void CQueue<T>::Destroy()
{
rear = front = 0;
currentcout = 0;
maxsize = 0;
if (elements)
{
delete [] elements;
}
}
- C++基于模版的循环队列实现
- c 实现的 循环队列
- 简单循环队列模版(数组实现)
- 循环队列模版(链表实现)
- 循环队列实现(C++)
- C 循环队列实现
- 循环队列 c 实现!!!!
- 【C++】实现循环队列
- 数据结构的C实现_循环队列
- 数据结构循环队列的实现c程序
- 循环队列的实现(C语言)
- c语言循环线性队列的实现
- 数据结构的C实现_循环队列
- 循环队列的实现(C语言)
- 顺序循环队列的c语言实现
- C语言-循环队列的简单实现
- 【数据结构】循环队列的实现(c++)
- c语言:循环队列的实现
- HTML5画布全球复合操作教程
- Java中的cookie(3)——cookie中存取中文
- Implement strStr() 字符串匹配(KMP)
- DIV和SPAN的共同和区别
- jquery评分插件
- C++基于模版的循环队列实现
- owasp 中国峰会video
- XCode5 运行app时,Xcode崩溃问题
- 蓝桥杯-历届试题 翻硬币
- 【JPA+JAX-RS+HTML5】第一弹——用户+文章+评论模块
- cvGrabFrame与cvQueryFrame
- String to Integer (atoi) 将字符串转化成整数
- 第四章(二)
- 沉鱼