循环队列CircleQueue 的使用
循环队列是实际编写应用中比较重要的一种数据结构,下面介绍在实际项目中用到的循环队列CircleQueue。它是用C++编写的,具体源代码见 https://github.com/duankai/CircleQueue
template<typenameAnyData>
struct DATA_NODE_T
{int index;AnyData * paDataNode;DATA_NODE_T<AnyData> * pstNext;
};
/************************************************************************/
/*
/* @CLASS: Declaration of CircleQueue class
/*
/************************************************************************/
template<typenameAnyData>
class CircleQueue
{
public :CircleQueue(intiSize);int GetCircleQueueLength();bool AddData(AnyData data);bool AllDataLarger(AnyData data, bool (* comparePf)(AnyDatad1,AnyDatad2));//All data in this queue are larger than databool AllDataSmaller(AnyData data, bool (* comparePf)(AnyDatad1,AnyDatad2));//All data in this queue are smaller than dadabool DelData();bool FullQueue();bool GetInstanceStatus();AnyData * GetDataByIndex(intindex);~CircleQueue();
private:void InitData();
private:int m_iSize;void * m_pdData;bool m_bInitRst;DATA_NODE_T<AnyData>*paHead;DATA_NODE_T<AnyData>*paTail;
};
在要使用的源文件代码中include CircleQueue.h即可。
1.CircleQueue(intiSize): 构造函数,iSize表示队列的长度。
2.int GetCircleQueueLength():得到队列的大小。
3.bool AddData(AnyDatadata):向队列中添加数据,如果超出队列的大小,则覆盖第一个添加的数据。
4.bool AllDataLarger(AnyDatadata,bool(*comparePf)(AnyDatad1,AnyDatad2)):用data和循环队列中的所有数据比较大小,比较函数则由comparePf指定。如果循环队列中的所有数据大于给定的data,则返回True,否则返回False。
5.bool AllDataSmaller(AnyDatadata,bool(*comparePf)(AnyDatad1,AnyDatad2)):用data和循环队列中的所有数据比较大小,比较函数则由comparePf指定。如果循环队列中的所有数据小于给定的data,则返回True,否则返回False。
6.bool DelData():删除当前数据,当前数据是尾指针所指的数据。
7.bool FullQueue():判断循环队列是否已满。
8.bool GetInstanceStatus():获得CircleQueue的实例状态,判断是否初始化成功。如果成功返回True,否则返回False。
9.AnyData * GetDataByIndex(intindex):根据循环队列节点索引获得CirleQueue中存储 的数据,类型为用户已经指定的类型。
10.~CircleQueue():析构函数。
11.void InitData():构造过程中初始化数据。