1:队列定义
#define Maxsize 100
typedef struct SqQueue{
int *pBase; //基地址
int nFront,nRear; //头指针,尾指针
}SqQueue;
2:循环队列的初始化
//循环队列的初始化
bool InitQueue(SqQueue &Q)//注意使用引用参数,否则出了函数,其改变无效
{
Q.pBase = new int[Maxsize];//分配空间
if(!Q.pBase) return false;
Q.nFront = Q.nRear = 0; //头指针和尾指针置为零,队列为空
return true;
}
3:循环队列的入队
//循环队列的入队
bool EnQueue(SqQueue &Q,int nData)//将元素nData放入Q的队尾
{
if ((Q.nRear + 1) % Maxsize == Q.nFront) //尾指针后移一位等于头指针,表明队满
{
return false;
}
Q.pBase[Q.nRear] = nData; //新元素插入队尾
Q.nRear = (Q.nRear + 1) % Maxsize; //队尾指针加1
return true;
}
4:循环队列的出队
//循环队列的出队
bool DeQueue(SqQueue &Q, int &nData) //删除Q的队头元素,用nData返回其值
{
if (Q.nFront == Q.nRear)//队空
{
return false;
}
nData = Q.pBase[Q.nFront]; //保存队头元素
Q.nFront = (Q.nFront + 1) % Maxsize; //队头指针加1
return true;
}
5:取循环队列的队头元素
int GetHead(SqQueue Q)//返回Q的队头元素,不修改队头指针
{
if (Q.nFront == Q.nRear)//队列空
{
return -1;
}
return Q.pBase[Q.nFront];
}
6:循环队列的长度
int QueueLength(SqQueue Q)
{
return (Q.nRear - Q.nFront + Maxsize) % Maxsize;
}