环形队列判满的条件(为什么要预留出一个空值)

多出一个空值肯定是为了避免什么问题

一开始我的想法是front指向队列的第一个元素,rear指向队列的最后一个元素

环形队列的最大长度为maxSize

所以此时,

判空的条件就是:front=rear

判满的条件就是(rear+1)% maxSize = front  

好像这没毛病啊 

毛病大了

在用数组实现队列时,书上是这样约定的

 此时rear指向的就是当前元素的下一个位置,这也就是为什么很多老师讲课的时候说的规定rear指向最后一个元素的后面一个位置(不理解的看一下图)

再回到环形队列,当我们插入最后一个元素的时候,此时rear就和front重合了,即rear=front

我们判空的条件就是rear=front

所以判空和判满的条件就一样了,那到底是判空还是判满呢,我也不知道

所以我们要改变判满的条件

书上也给出了解决方法

第一种方法:

我们就少用一个元素空间,即如下图就判定队列已满

此时队列未满的情况就是(rear+1)%maxSize = front

这样就解决了判空和判满条件一样的那个问题

回头看一下,这不是和我们一开始说的那个判满的条件是一样的吗

你在想想,真的一样吗,虽然式子一样,但是表达的内容已经不一样了

第二种方法:

可以设定一个变量来保存队列的长度,这样就可以不用浪费一个内存空间,虽然判满和判空的条件一样,但是我们可以根据队列长度来判断队列是空还是满,队列长度等于maxSize就是满,队列长度=0就是空

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值