环形队列原理,全网最通俗易懂

队列是什么

队列是一种很常见的数据结构,满足先进先出的方式,如果我们设定队列的最大长度,那就意味着进队列和出队列的元素的数量实则满足一种动态平衡。

如果我们把首次添加入队列的元素作为一个一维坐标的原点,那么随着队列中元素的添加,坐标原点到队尾元素的长度会无穷无尽的增大,随这之前添入的元素不断出列,对头对应的下标点也在不断增大。这样,进队列和出队列的元素的数量就对应到对头和队尾下标点的移动

因此我们评判一个队列长度是否溢出原先约定的最大长度,实则就是在评判队尾坐标点与队头坐标点之间的差值,无论是出队列还是入队列,队头和队尾的坐标都在不断增大

front指针和rear指针的引入

虽然队尾和队头的下标在不断增大,但是我们对于队列的研究只需要局限在队头与队尾之间的元素,坐标原点到队头之间的元素已经算作出列元素,并不需要研究。因此我们不妨将队列在逻辑上放入一个事先设定容量的一维数组中,只要这个数组的容量是队列中元素的个数+1就行,为什么要这么设定待会再讲。我们想要达到的目的是,无论出列还是入列,本质上是通过修改数组中元素的值,那些已经出列的元素所在的下标位需要放置新入列的元素,并在逻辑上保证新入列元素位于队尾就行。

因此,我们不得不得引入头指针front和尾指针rear,对指针指向的数组下标对应空间进行操作,来修改数组中元素的值。

front指针和rear指针的理解

front:初始值为0,对应索引位待出列,若当前指向的数组下标元素要出列,则先执行出列动作(实际上不用操作,出列的索引位可以被新入队的元素覆盖),随后front指针就要向后一位,即front++

rear:初始值为0,对应索引位待入列,若当前指向的数组下标元素要入列,则先执行入列动作(索引位元素赋值),随后front指针就要向后一位,即rear++

队列最大长度匹配数组容量导致一种错误的解决方案

这就会有一个问题,随着队列中元素的不断更迭,front和rear很快就会超过数组容量,造成数组索引越界

  • 61
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
前缀和和差分是算法中常用的两种技巧,用于快速计算数组区间的和与修改区间内的元素。 前缀和,即前缀数组,是指将原数组经过一定的操作,得到一个新的数组,新数组的每个元素是原数组中对应位置前所有元素的和。例如,对于数组[1, 2, 3, 4, 5],它的前缀和数组为[1, 3, 6, 10, 15]。前缀和的计算可以通过动态规划的思想实现,从左到右遍历数组,当前位置的前缀和等于前一个位置的前缀和加上当前位置的元素值。 前缀和的应用非常广泛,常见的应用场景有计算数组区间的和、统计数组中某个元素出现的次数等。对于计算数组区间的和,可以通过前缀和数组的差值来快速计算,例如计算数组中第i个元素到第j个元素的和,等于前缀和数组的第j个元素减去第i-1个元素。 差分,顾名思义,是指得到一个数组的差分数组,差分数组的每个元素是原数组中对应位置与前一个位置元素的差。例如,对于数组[1, 3, 6, 10, 15],它的差分数组为[1, 2, 3, 4, 5]。差分的计算可以通过动态规划的思想实现,从右到左遍历数组,当前位置的差分等于原数组当前位置的值减去前一个位置的值。 差分数组的应用也非常广泛,常见的应用场景有修改数组区间内的元素值、求解某个位置的元素值等。对于修改数组区间内的元素值,可以通过差分数组来快速实现,如将数组中第i个到第j个位置的元素都加上某个值,只需要将差分数组的第i个元素加上该值,差分数组的第j+1个元素减去该值。 通过图文并茂的方式,我展示了前缀和和差分的计算过程和应用示例,希望能帮助你理解这两个技巧的使用方法和效果。如果有任何疑问,欢迎随时留言。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值