循环队列定义
把队列的这种头尾相接的顺序存储结构称为循环队列。
typedef int QElemType; /*QElemType 类型根据实际情况而定,这里假设为int*/
/*循环队列的顺序存储结构*/
typedef struct
{
QElemType data[MAXSIZE];
int front; /*头指针*/
int rear; /*尾指针,若队列不空,指向队列尾元素的下一个位置*/
} SqQueue;
/*循环队列的初始化代码如下*/
/*初始化一个空队列Q*/
status InitQueue(SqQueue *Q)
{
Q->front= 0;
Q->rear= 0;
returnOK;
}
/*返回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->fromt) /*队列满的判断*/
returnERROR;
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) /*队列空的判断*/
returnERROR;
*e =Q->data[Q->front]; /*将队头元素赋值给e*/
Q->front= (Q->front + 1) %MAXSIZE; /*front 指针向后移一位置*/
/*若到最后则转到数组头部*/
returnOK;
}