实现循环队列类,剩余一地址空间区分队列的空与满
- 暂时支持基本数据类型:int,char,float,double等。可以支持类么?,操作符new可以用来构建类数组么?
- 模板参数实现方式: template <typename T, unsigned N>
template <typename T>
class CirQueue
{
private:
T* a;
int N;
int F;//队列头
int R;//队列尾
public:
CirQueue(int len);
bool IsEmpty();
bool IsFull();
bool InQueue(T val);
bool OutQueue(T& val);
}
CirQueue::CirQueue(int len):
a(NULL),
N(len),
F(0),
R(0){
a = new T[len];//???
}
队列空 :头尾指向相同
bool CirQueue::IsEmpty()
{
if (F == R)
{
return true;
}else
{
return false;
}
}
队列满:头指向落后尾一个单位
bool CirQueue::IsFull()
{
if ( (F+1)%N == R)
{
return true;
}else
{
return false;
}
}
入队
bool CirQueue::InQueue(T val)
{
if( (F + 1)%N == R)
{
return false;
}else
{
a[F] = val;
F = (F + 1)%N;
return true;
}
}
出队
bool CirQueue::OutQueue(T & val)
{
if (F == R)
{
return false;
}else
{
val = a[R];
R = (R + 1)%N;
return true;
}
}