循环队列

我们两清 提交于 2019-12-26 04:57:37

顾名思义,循环队列是一种队列。

循环队列常用于服务器用户排队等待情况。

循环队列具有头指针f和尾指针r,头指针f指向队列中实际存在的第一个值,r指向队列中实际存在的最后一个值的下一个位置

为什么要指向下一个位置?

我们先假设尾指针r指向队列中实际存在的最后一个值。

在这里插入图片描述
f为首,r为尾
push:r=(r+1)%n
pop:f=(f+1)%n

什么时候队列为空呢?删完了不就为空了,那么我们让f开始删除,每删除一个节点,f向后移动。
循环删除后f的位置:f=(f+1)%n。(n为队列大小)

在这里插入图片描述
这种情况仅剩一个元素,f=r,再删除一个元素队列即为空。
在这里插入图片描述
此时队列为空,可以看出,为空时(r+1)%n=f

那什么时候为满呢?

我们用同样的思维可以得到满时的情况。在这里插入图片描述
此时为满,(r+1)%n=f

发现了吗,队满和对空竟然是一样的,那这样就没法判断什么时候是空还是满了。

这次我们空出一块地方,把r指向实际存在的最后一个值的下一个位置。

在这里插入图片描述
这时,r指向实际存在的元素的下一个位置。

那么聪明的你就发现了,这样做以后空和满的判断就不冲突了

empty:r=f
full:(r+1)%n=f

另一种判断队列满还是空的方法:

可以用一个变量index来计数,如果index=n泽满,index=0为空。此时r不需要指向后一个元素。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!