关于循环队列求队列值有多少值

在B站上学习了数据结构与算法的时候的时候,在环形队列里面有这样一个公式
(rear+maxSize−front)%maxSize(rear + maxSize - front) \% maxSize (rear+maxSize−front)%maxSize

为了更加深入的了解这个算式为什么是这样,从而窥探算法的大门,于是我思考了一下,并且发现解法

看完这个保证细致到位,各种算式计算例题一步到位

转换我们的公式

(rear+maxSize−front)%maxSize=(rear−front+maxSize)%maxSize(rear + maxSize - front) \% maxSize = (rear - front + maxSize) \% maxSize (rear+maxSize−front)%maxSize=(rear−front+maxSize)%maxSize

为什么要这样转换这个算式,因为这样方便我们进行理解

搞清楚几个问题,我们就能知道这个算式为什么要这样子

  1. 假如是一个正常的队列,我要怎么计算有多少有效数值?
  2. 当我们的索引超出我们的队列,如何让他回归数列?
  3. 当我们使用%的时候,rear和front谁在前谁在后对结果和结果的分析

计算正常队列的有效数字

正常数列就是我们之前学到的,数值只能一次性不能重新循环的版本,在那个版本里面计算有效数值非常简单

于是我们可以想象一个无法循环的循环队列,这听起来很怪,但是我们可以通过简化过后的循环队列来算值
有效数值=rear−front有效数值 = rear - front 有效数值=rear−front

但是这里注意了,我们的rear并非真的是指向我们的最后一个元素,而是指向最后一个元素的后一个位置,所以公式应该变为

有效数值=rear+1−front有效数值 = rear + 1 - front 有效数值=rear+1−front

当我们的索引超出队列,使用百分号让他回来

使用%可以让那些超过的数字回到队列里面来

比如当我们的rear已经指向了队列.length(实际上这是一个虚拟的位,实际上指向 - 队列.length - 1),这已经没有下一位,于是我们要想办法让他回到我们的队列开头

我们可以看到当我们队列长度为5的时候,不管我们的数值有多大,最终都无法超过5,请看下方GIF

rear和front在循环队列中的计算

当我们的rear在front的前面(队列已经超过了长度开始循环了)

这个时候你可以给我们的尾指针加上我们的数组长度让我们的队列变成这样:

这个时候我们的有效值计算公式是什么呢?
rear+maxSize−frontrear + maxSize - front rear+maxSize−front

可以看到,已经有点上面的形状了,但是在这种情况下我们不需要加上百分号,可是这个算式就这样结束了吗?

当我们的rear在front的后面(正常情况)

虽然我们现在已经知道循环之后尾巴在前面的有效值怎么算,那么带入刚刚那个算式我们来看看这个正常情况能不能用:

现在使用算式rear+maxSizerear + maxSizerear+maxSize

这个时候玩笑就开大了,我们再使用rear+maxSize−frontrear + maxSize - frontrear+maxSize−front的话,结果就偏差到十万八千里去了

rear+maxSize−front=7(个有效元素,实际上只有3个)rear + maxSize - front = 7(个有效元素,实际上只有3个) rear+maxSize−front=7(个有效元素,实际上只有3个)

我们需要让他落在我们的队列里面,所以我们给他百分号

(rear+maxSize−front)%maxSize=7%4=3(rear + maxSize - front) \% maxSize = 7 \% 4 = 3 (rear+maxSize−front)%maxSize=7%4=3

可以看到加上百分号之后我们的算式又能用了,而且刚好等于正确答案3

测试一下我们当我们的rear在front的前面的情况是否能使用

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ &(rear + maxSi…

备注:因为rear是指向当前位置的下一位,所以在参加运算的时候要+1如图,当前尾指针的序号是1,但是此时我们需要给他+1,让他变成2再参与运算

到这里我们就结束了,最终我们得到结论如何算出一个循环队列的有效值

(rear+maxSize−front)%maxSize(rear + maxSize - front) \% maxSize (rear+maxSize−front)%maxSize

(rear + maxSize - front) % maxSize 公式的理解(文图详解,手把手)相关推荐

  1. 英集芯ip6809规格书pdf芯片文档详解及典型电路原理图

    英集芯ip6809芯片是一款无线充电发送端控制器SOC芯片,兼容WPC Qi v1.2.4新标准.支持2-3线圈无线充电发射端应用,支持A28线圈.MP-A8线圈,支持客户线圈定制方案,支持5W.苹果 ...

  2. 悟道 · 文溯详解:蛋白质序列的大规模预训练

    整理:马瑞军 校对:裘捷中 智源导读:3月20日,在「智源大规模预训练模型交流论坛」,由智源研究院副院长.清华大学教授唐杰带头,发布了「悟道1.0」四大模块的进展工作,分别包括 悟道·文源--以中文为 ...

  3. shell181网格划分_【2017年整理】ANSYS中SHELL181单元理解和参数详解.docx

    [2017年整理]ANSYS中SHELL181单元理解和参数详解 ANSYS中SHELL181单元参数详解 SHELL181单元说明: SHELL181单元适合对薄的到具有一定厚度的壳体结构进行分析. ...

  4. 悟道·文澜详解:目前最大的中文多模态通用预训练模型

    近年来,BERT等预训练语言模型在多类自然语言处理任务上取得了显著的性能提升,从而极大地改写了研究范式.随着OpenAI超大规模语言模型GPT-3的发布,预训练语言模型在自然语言理解能力上再次被推至新 ...

  5. 牛股启动公式 跟庄吃面主图及选股公式 牛股启动特征详解

    怎么抓牛股启动呢,这个跟庄吃面公式成功率极高的抓到启动初期大牛股.公式简单实用,配合成交量一起使用会起到事半功倍的效果,极品翻倍牛股选股公式. 牛股启动指标用法: 牛股启动公式包含一个主图+选股公式, ...

  6. c语言多组数据判断回文字符串,详解判断回文字符串跟回文数算法的C语言代码...

    详解判断回文字符串和回文数算法的C语言代码! 一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define ...

  7. 一文透彻详解卡尔曼滤波原理

    文章目录 前言 一 卡尔曼滤波中的五个公式 二 重要公式与变量的理解 三 卡尔曼滤波的一个简单demo 前言 由于最近一段时间在做多传感器融合工作,以下是根据这段时间的实践与学习,对卡尔曼滤波的一些理 ...

  8. 论如何优雅的处理回文串 - 回文自动机详解

    写在前面 最近无意中看到了这个数据结构,顺便也就学习了一下. 而且发现网上关于这个算法的描述有很多地方是错的,在这里做了一些更正. 处理字符串的算法很多: KMP,E-KMP,AC自动机,后缀三兄弟: ...

  9. 【NLP】完全解析!Bert Transformer 阅读理解源码详解

    接上一篇: 你所不知道的 Transformer! 超详细的 Bert 文本分类源码解读 | 附源码 中文情感分类单标签 参考论文: https://arxiv.org/abs/1706.03762 ...

  10. 【PDF】java使用Itext生成pdf文档--详解

    [API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/i ...

最新文章

  1. [BZOJ3261] 最大异或和 (异或前缀和,可持久化Trie)
  2. 成功解决PermissionError: [WinError 5] 拒绝访问 \lib\\site-packages\\h5py\\_errors.cp38-win_amd64.pyd‘
  3. tcp为什么比udp慢_TCP和UDP那些事儿
  4. centos7 安装 python3.5
  5. Linux/Unix 新手和专家教程
  6. 20172332 2017-2018-2 《程序设计与数据结构》第七周学习总结
  7. Inception-v4论文总结
  8. 异常检测: 多元高斯分布
  9. Java课程设计和sql数据库_数据库SQLserver+java课程设计
  10. xCodeGhost 事件专题总结
  11. 计算机函数公式发生额总计,16个Excel函数公式,解决会计工作中80﹪的难题!
  12. php 实现网站克隆,自己写的php curl库实现整站克隆功能
  13. jquery将html转换word,将网页内容导出word文档jQuery插件
  14. 活法 - 第三章 磨练灵魂、提升心志
  15. 计算机课程成绩认定管理办法,全日制普通本科生课程学分成绩对接认定管理办法...
  16. linux vrrp 配置命令,虚拟路由器冗余协议(VRRP)简单实验
  17. qt 禁止alt+f4_禁止上下关闭按钮和Alt + F4
  18. 使用Python开发一个恐龙跑跑小游戏,玩起来
  19. [计算机漫谈]网络初步:一个分组的生命历程
  20. 使用source导入MySQL出现“ERROR: Failed to open file xx, error: 2“问题的解决

热门文章

  1. 第10章:项目沟通管理和干系人管理-章节真题
  2. python怎么保留整数输出_python怎么保留整数
  3. Word插入的表格如何调整长和宽
  4. c语言1076素数,九度OJ 1076:N的阶乘 题解
  5. 「75页PDF免费下载」面向所有人的机器学习科普大全
  6. 激光雷达运动畸变去除方法
  7. 对dede标签调用的内容进行判断并输出的方法
  8. 2022hgame-week1 wp
  9. 学习andriod开发之 异步加载图片(二)--- 使用其他进度条
  10. 怎么用wifi进e站_科普微e站 | 注意!路由器千万别再这样用,当心信号越来越差!...