环形队列

可以先参考上一篇为什么会有环形队列
上一篇:队列

思路
  1. 约定front指向队列的第一个元素,也就是说data[front]就是队头数据,front初始值为0。
  2. 约定rear指向队列的最后一个元素的后一个位置,也就是说data[rear-1]就是队尾数据,rear初始值为0。
  3. 队列满的条件是:***( rear+1 )% maxSize == front***
  4. 队列空的条件是:rear == front
  5. 队列中的元素个数为:***( rear + maxsize - front) % maxSize***
  6. 因为rear指向队尾的后面一个位置,这个位置就不能存数据,因此有效数据只有maxSize-1个
下面分析判满、判空、元素个数的表达式

先举个例子,在一个由座位组成的环形中,设当前座位的位置是current,座位总个数是count,则当前位置的下一位置是(current+1)% count

判满
  • 队列满的情况无非就如下二图所示(为了便于分析,将数组队列画成一个环形,数组长度为8,即maxSize = 8)。由图可知当front刚好指向rear的下一个位置时队列满,而rear的下一个位置是 (rear+1)% maxSize,所以当( rear + 1 )% maxSize == front 时,队列就满了。
    在这里插入图片描述
第一种,front刚好指向数组的头部,rear刚好指向数组尾部:front = 0,rear = 7

在这里插入图片描述

第二种,front和rear都指向数组的中间:front = 4,rear = 3
判空
  • 队列为空的情况如下图所示,当队头队尾都指向一个位置,即 front == rear 时,队列为空。
    在这里插入图片描述
当front == rear时,队列为空
  • 30
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值