完全说明:环型队列长度如何计算

本文解析了循环队列长度的计算方法,重点在于理解为何采用顺时针移动front,避免逆时针导致的错误,并通过实例分析了顺时针操作在不同情况下的正确性。关键在于理解加减法在受限范围内的应用和取模运算的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 说明队列长度计算公式

参考:如何求循环队列的元素个数?

  1. 假设数据只进入队列,而不出队列,即front=0,在原处,而rear在不断增加。此时显然,循环队列的元素个数为rear-front=rear-0 =rear, 如下图
    请添加图片描述

  2. 假设数据进入队列,有出队列,如下图
    在这里插入图片描述

此时要想得到队列长度,参考上面思想,我们可以把队列顺时针移动,使其front回归到front=0,此时rear的值就是队列长度。
那么队列移动多少次呢?先给答案:MaxSize-front次。
即,下图这么多次:
在这里插入图片描述
rear的位置响应的移动了MaxSize次,移动后rear的位置为:rear=(rear+MaxSize-front)%MaxSize。这也是队列的长度。

二 为什么是顺时针移动而不是逆时针移动呢?

  1. 场景1:rear>front,即
    在这里插入图片描述
    假设:MaxSize=10,front=1,rear=4,
    (1)逆时针旋转的话就是(4-1)%10=3
    (2)顺时针的话就是(4+10-1)%10=3
    此时是没有问题的。
  2. 场景2:rear<front,即
    在这里插入图片描述
    假设:MaxSize=10,front=maxSize-1=9,rear=2,
    (1)逆时针就是(2-9)%10=-7
    (2)顺时针就是(2+10-9)%10=3
    此时逆时针计算的就是不正确的。
  3. 原因分析
    在队列中,顺时针是加法,而逆时针是减法,在循环队列中,rear和front都通过取模运算,限制在了[0,MaxSize-1]范围内,当rear<front是,此时做减法会导致结果小于0,而出现结果的错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东风难破

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值