/*************************************************************************
> File Name: CircleQueue.h
> Author:keson
> Mail:keson@bupt.edu.cn
> Created Time: 2014年11月22日 星期六 17时00分13秒
************************************************************************/
#ifndef _CIRCLEQUEUE_H
#define _CIRCLEQUEUE_H
template<typename Object>
class CircleQueue
{
public:
//constructor
explicit CircleQueue(int initCapacity=0):theCapacity{initCapacity}
{objects=new Object[theCapacity];}
//Deconstructor
~CircleQueue()
{
delete[]objects;
}
Object &operator[](int index)
{
return objects[index];
}
//enter the queue
void enqueue(Object x)
{
if(Full())
throw "out_of_range";
back=(back+1)%theCapacity;
objects[back]=x;
currentSize++;
}
//out from the queue,the front position don't save data
//the front+1 position save the first data
Object dequeue()
{
if (Empty())
throw "underflow_error";
front=(front+1)%theCapacity;
return objects[front];
currentSize--;
}
int size()
{
return currentSize;
}
bool Empty()
{
return back==front;
}
// the position front don't save data
// when full ,save theCapacity-1 data
bool Full()
{
return ((back+1)%theCapacity==front);
}
private:
int theCapacity;
int currentSize=0;
int front=0;
int back=0;
Object *objects;
};
#endif
循环队列
最新推荐文章于 2025-03-23 17:35:24 发布