1 定义:队列的头尾相接的顺序存储结构称为循环列队
2 如何判断队列满?
假设:front和rear只相差一个空格时就是满的情况。
队列最大尺寸为:QueueSize,
队列满的条件:(rear+1)%QueueSize==front
通用队列计算公式:(rear-front+QueueSIize)%QueueSize
循环队列的顺序存储结构
typedef int QElemType
/*循环队列的顺序存储结构*/
typedef struct
{
QElemType data[MAXSIZE];
int front;
int rear;
}
循环队列的初始化代码
/*初始化一个空队列*/
statue InitQueue(SqQueue *Q)
{
Q->front=0;
Q->rear=0;
return OK;
}
循环队列求队列长度代码
/*返回 Q的元素个数,也就是队列的当前长度* /
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
循环队列的入队操作代码
/*若队列未满,则插入元素e为Q新的队尾元素*/
Status EnQueue(SqQueue *Q,QElemtype e)
{
if((Q->rear+1)%MAXSIZE==Q->front) /*队列满的判断*/
return ERROR;
Q->data[Q->rear]=e; /*将元素e赋给队尾*/
Q->rear=(Q->rear+1)%MAXSIZE;/*rear指针向后移一个位置*/
/*若到最后则转到数组头部*/
return OK;
}
循环队列的出队列操作代码
/*若队列不空,则删除Q中队头元素,用e返回其值*/
Status DeQueue(SqQueue *Q,QELEMType *e)
{
if (Q->front==Q->rear) /*队列空的判断*/
return ERROR;
*e=Q->data[Q->front]; /*将队头元素赋值给e*/
Q->front=(Q->front+1)%MAXSIZE;/*front 指针向后移一位*/
/*若到最后则转到数组头部*/
return OK;
}