在分享完队列的基础知识后,我们再来看队列的几种特殊分类——循环队列。循环队列其实跟队列区别不同的点就在于出队和入队。我们经常把循环队列看成一个环。
如图:

循环队列入队操作:
Status EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear+1)%MAXQSIZE==Q->front)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
循环队列出队操作:
Status DeQueue(SqQueue *Q,QElemType *e)
{
if(Q->front==Q->rear)
return ERROR;
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return OK;
}
这里需要特别注意一下front指针是指向头元素,而rear指针是指向最后一个元素的下一个元素。
count是指队列大小。front,rear和count三者之间的关系
已知 front 、 rear ,求队中元素个数 count :
count =( rear - front + MaxSize )% MaxSize
已知 front 、 count ,求 rear:
rear =( front +count )% MaxSize
已知 rear 、 count ,求 front :
front =( rear - count + MaxSize )% MaxSize
(Q->rear+1)%MAXQSIZE==Q->front是判断循环队列的重要的条件。
好啦,今天对于队列的基础知识补充就到这啦。其实还有一个两端队列,平时很少见到这种。书籍上记载地很少。这里就不说啦。
本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.
867

被折叠的 条评论
为什么被折叠?



