有一个用数组Q[1..m]表示的环形队列(先进先出,队尾进队头出),约定队列的容量为m,f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向)。若队列非空且未满,则计算队列中元素个数的

1. 题目

有一个用数组Q[1…m]表示的环形队列(先进先出,队尾进队头出),约定队列的容量为m,f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向)。若队列非空且未满,则计算队列中元素个数的公式应为 ?

2. 题解

2.1 解法1

分情况讨论:
1.若f<r<=m, 则有r-f <m,即队尾没有超出边界,则为r-f
2. 若r<f<=m, r-f < 0, 即队尾超出边界m,那么应为m+r -f
综合两种情况,得到答案 (m+r-f) mod m

2.2 解法2

注意数组C[1…m]下标从1开始,并且r为队尾元素的后一位置。
当r>f时,好说,队列的长度为r-f;
当r<f时,队列的长度分为两段,一段是m-f+1,一段是r-1,加在一起,队列长度为r-f+m;
当r=f时,队列长度可能为0也可能为m,实际编程时,会设置一个boolean型变量来区分。
因此通用的计算队列长度公式为:(r-f+m)%m

3. 记住公式

# 队列中,队列满的条件是:
(rear+1)%QueueSize=front;
# 队列长度公式是:
(rear-front+QueueSize)%QueueSize。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值