循环队列的结构:
在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置,阴影部分表示队列:
另外通过取模,头指针和尾指针就可以在顺序表空间内以头尾衔接的方式 ”循环" 移动。(为了防止假溢出)
注意:循环队列为了方便判断队空和队满,一般少用一个元素空间, 即最后一个元素不用,队列空间大小为m时,有m-1个元素就认为是队满。详情见入队和出队。
求队列长度:
队列长度为:(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE
入队:
队满的条件: (Q rear+ 1)%MAXQSIZE= Q.front
出队:
队空的条件: Q.front == Q.rear
循环队列特点:
与顺序栈相似,如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度!若用户无法预估所用队列的最大长度, 则宜采用链队列。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAXQSIZE 100
typedef int QElemType;
//循环队列的结构
typedef struct
{
QElemType *base; //基地址
int front; //头指针
int rear; //尾指针
}SqQueue;
//初始化
void InitQueue(SqQueue &Q)
{
Q.base = new QElemType[MAXQSIZE];
if (!Q.base) exit; //分配失败退出
Q.