循环队列中的求队列长度公式怎么来的?【数学角度】

循环队列中的队列长度怎么来的?

引入

在一个循环队列中,队列的元素个数可以通过头指针(Front,通常用F表示)和尾指针(Rear,通常用R表示)来计算。假设队列的存储空间大小为n,队列中元素的个数(即队列长度)可以通过以下公式计算:

队列长度 = (R−F+n)%n

这个公式的含义是:尾指针R减去头指针F,加上n再取模n。这是因为R - F可能为负数,通过加上n保证结果始终为正数,然后再对n取模,确保结果在队列容量范围内。

image-20231206151511455

例题 + 图示

  • 情况1 R > F

image-20231206151341795

  • 情况2 R < F

image-20231206151403359


上述我们已经会使用循环队列求队列的公式了,那么这个公式是如何来的呢 ?

知其然,亦知其所以然

数学角度理解

从数学的角度来理解循环队列中队列长度的计算涉及到模运算(余数运算)的概念。首先,我们先了解一下模运算的定义:

给定整数a和正整数n,a mod n的值就是a除以n的余数。这可以表示为:

image-20231206150722632

这样的定义保证了 0 ≤ a mod n < n


在循环队列中,头指针F和尾指针R的差值(R - F)可以表示队列的长度。然而,由于队列是循环的,当尾指针R超过了队列的最大容量n时,尾指针需要回到队列的开头,即回到0的位置。这时候 RF 就可能变成负数。也就是我上述列举的例题 1.2 的情况, R-F < 0

为了得到正确的队列长度,我们使用模运算。具体来说,我们加上n,这样就将负数变成了正数,然后再取模n,确保结果在合法范围内。这就是为什么队列长度的计算公式是 (RF+n)%n 的原因。


总结

通过这种方式,我们能够正确地计算出循环队列中的队列长度,考虑了队列循环的特殊性。这种数学定义和计算方式有助于在实际编程中处理循环队列时保持正确性。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二:C语言-数据类型和变量

二&#xff1a;数据类型和变量 1.数据类型的介绍&#xff1a; ​ 内置数据类型&#xff08;C语言本身具有的&#xff09;&#xff1a;字符 - char&#xff1b;整型 - int&#xff1b;浮点型 - float&#xff1b;布尔类型 - _Bool ​ 自定义数据类型&#xff08;自己创建的类…

选择更好的Notes索引附件方式

大家好&#xff0c;才是真的好。 首先介绍最近产品更新消息。在上一周&#xff0c;HCL主要发布了以下几个产品更新&#xff1a;HCL Verse 3.2.0、HCL Volt MX Go 2.0.2、HCL Domino Rest API 1.0.8。 HCL Verse是今后Domino的产品当中主要使用的webmail功能&#xff0c;这一次…

kafka学习笔记--基础知识概述

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

【开题报告】基于SpringBoot的农场管理系统的设计与实现

1.选题背景 随着社会经济的发展和人们对食品安全和质量的要求不断提高&#xff0c;农业管理也面临着新的挑战和需求。传统的农场管理方式往往依靠手工记录和经验积累&#xff0c;存在信息不及时、管理效率低下等问题。而基于SpringBoot的农场管理系统的设计与实现&#xff0c;…

国标GB28181设备注册安防监控平台EasyCVR不上线是什么原因?

安防视频监控EasyCVR平台兼容性强&#xff0c;可支持的接入协议众多&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

[头歌Python实验]Python入门之基础语法

目录 第1关&#xff1a;行与缩进 第2关&#xff1a;标识符与保留字 第3关&#xff1a;注释 第4关&#xff1a;输入输出 如果对你有帮助的话&#xff0c;不妨点赞收藏关注评论走一波吧&#xff0c;爱你么么哒吗&#x1f618;&#x1f496;&#x1f496;&#x1f496; 第1关…

逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取

文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展&#xff0c;网站为了保护自己的数据和资源&#xff0c;纷纷采用了各种反爬虫机制。然而&#xff0c;逆向爬虫技术的出现&…

【Python百宝箱】漫游Python数据可视化宇宙:pyspark、dash、streamlit、matplotlib、seaborn全景式导览

Python数据可视化大比拼&#xff1a;从大数据处理到交互式Web应用 前言 在当今数字时代&#xff0c;数据可视化是解释和传达信息的不可或缺的工具之一。本文将深入探讨Python中流行的数据可视化库&#xff0c;从大数据处理到交互式Web应用&#xff0c;为读者提供全面的了解和…

控乐屋品牌|智汇恒星全宅智能空间万物互联,千亿蓝海蓄势待发

随着5G、大数据、云计算、物联网等技术的发展&#xff0c;智能化正覆盖人们生活的方方面面&#xff0c;全屋智能的出现为“一键式”智能家居生活享受提供无限可能。近年来智能家居行业总体规模增长迅速&#xff0c;数据显示&#xff0c;2022年中国智能家居行业市场规模约为6200…

Redis滚动分页的使用

Feed流 关注推送也叫Feed流。通过无限下拉刷新获取新的信息。 Feed流产品常见有两种模式&#xff1a; Timeline: 不做内容筛选&#xff0c;简单的按照内容发布时间排序&#xff0c;常用于好友或关注。例如朋友圈 优点&#xff1a;信息全面&#xff0c;不会有缺失。并且实现也…

2023五岳杯量子计算挑战赛APMCM亚太地区

问题一要求在特定区域内部署两个边缘服务器&#xff0c;以便根据计算需求分布覆盖最大的计算需求。每个边缘服务器都有一个覆盖半径为1。目标是确定两个边缘服务器的位置&#xff0c;以覆盖最大的计算需求。假设边缘服务器的位置位于网格的中心&#xff0c;每个网格内的计算需求…

我们为什么那么关注 Java 中的 String Template ,Java 21 特性

本心、输入输出、结果 文章目录 我们为什么那么关注 Java 中的 String Template &#xff0c;Java 21 特性前言String TemplateString Template 有什么好处字符串连接 – 一个常见但无趣且容易出错的任务jetbrains IDEA 2023.2 版本及以上对于 String Template 的支持字符串模板…

试编写算法将带头结点的单链表就地逆置(就地是指辅助空间复杂度为 O(0))。

题目描述&#xff1a;试编写算法将带头结点的单链表就地逆置&#xff08;就地是指辅助空间复杂度为 O(0)。 分析&#xff1a; 将单链表就地逆置可以考虑使用头插法。 LinkList Reverse(LinkList L){LNode *p L->next;LNode *r;L->next NULL;while(p){r p->next;p…

redis中使用pipeline

在操作数据库时&#xff0c;为了加快程序的执行速度&#xff0c;在新增或更新数据时&#xff0c;可以通过批量提交的方式来减少应用和数据库间的传输次数&#xff1b;在redis中也有这样的技术实现批量处理&#xff0c;也就是管道——Pipeline。它也是通过批量提交数据的方式来实…

FPS和SFTP的速度哪个更快?区别在哪里?

在互联网时代&#xff0c;我们频繁需要传输大文件&#xff0c;如视频、音乐、图片和文档等。这些文件不仅占用大量空间&#xff0c;而且传输时间长。确保传输过程的安全性和稳定性&#xff0c;以防文件被窃取或损坏成为重要考虑因素。在选择传输方式时&#xff0c;FPS和SFTP是两…

力扣-435.无重叠空间

利用快排&#xff0c;对数组右边界进行排序。 用一个变量记录区间的分割点&#xff0c;然后用这个分割点去和下一个区间做比较&#xff0c;如果没有重叠&#xff0c;更新右边界&#xff0c;没有重叠的区间个数加一。 然后更新右边界&#xff0c;继续进行比较。 最后用总区间…

Databend 如何利用 GPT-4 进行质量保证

背景 在数据库行业&#xff0c;质量是核心要素。 Databend 的应用场景广泛&#xff0c;特别是在金融相关领域&#xff0c;其查询结果的准确性对用户至关重要。因此&#xff0c;在快速迭代的过程中&#xff0c;如何确保产品质量&#xff0c;成为我们面临的重大挑战。 随着 Da…

leaflet:经纬度坐标转为地址,点击鼠标显示地址信息(137)

第137个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中将经纬度坐标转化为地址,点击鼠标显示某地的地址信息 。主要利用mapbox的api将坐标转化为地址,然后在固定的位置显示出来。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示…

Springboot 项目关于版本升级到 3.x ,JDK升级到17的相关问题

由于spring 停止对2.x 版本的维护&#xff0c;以及 jdk 频繁发布等客观因素&#xff0c;现需要对已有springboot 工程做一次全面升级&#xff1b;已因对市面上第三方等依赖库的兼容问题&#xff1b; 现有工程使用哥技术栈是版本&#xff1a; freemarker &#xff1a;2.3.32 spr…

Segment Anything--SAM框架(二)

文章目录 prologuepaper && codeImage encoderPrompt encoderLightweight mask decoderMaking the model ambiguity-aware prologue 没什么事&#xff0c;写一写SAM的paper中关于模型框架的部分和实际代码部分。 paper && code SAM有三个组件&#xff0c;如图…