循环队列

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

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

循环队列具有头指针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不需要指向后一个元素。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值