力扣经典题目之->设计循环队列 的超详细讲解与实现

news2024/11/14 16:18:51

一:题目

二:思路讲解

前提:

a:本文采取数组来实现队列去解决题目

b:开辟k+1个空间,front指向队首,rear指向队尾的后一个,rear这样会更好的判空和判满

以下根据pop和push感受满和空以及所有的边界的处理

1:初始状态

解释:当front == rear 即空 

2 :push 1 2 3 4

解释:此时就是满了,那再push一个5会怎样?

3:在满的情况push 5

解释:得到判满条件(rear+1)%(k+1)== front,当rear的下一个就是front的时候就代表满了

Q:为什么不直接rear+1 = front?

A:这只适用于rear在数组非末尾位置的时候,而上面的表达式均适用

4:pop 1 2

5:push5 6

解释:rear的边界处理:rear = (rear+1)%(k+1) 

6:在满的情况下 push 7

解释:这是rear在非末尾的位置的判满, (rear+1)%(k+1)== front同样适用

7:pop 3 4 5 6 得到空

解释:

1:可得只要rear和front相等,就是空

2:front的边界处理 :front =(front)%(k+1)

总结:

通过这几步我们可知,满和空的判断表达式 ,以及front和rear超过边界的处理表达式

满:(rear+1)%(k+1)== front(rear 的下一个是front就是满)

空:front == rear

rear超过边界:rear = (rear)%(k+1) 

front超过边界:front =(front)%(k+1)

边界处理就是(下标)取模(数组空间)

最后一个边界处理:取队尾数据

当rear下标为0 的时候,这时候取队尾,rear-1 会等于-1,所以需要处理

1:三目操作符 rear = rear==0?k:rear

2:取模:rear = (rear+k)%(k+1)

这两种方法都适用与所有的取队尾

三:代码展示及其解释

1:初始化

解释:定义我们需要的值

2: MyCircularQueue(k): 构造器,设置队列长度为 k 。

解释:malloc  k+1个整形的数组空间给a

3:isEmpty(): 检查循环队列是否为空

解释:根据我们前文的判空表达式 

4:isFull(): 检查循环队列是否已满

解释:根据我们前文的判满表达式 

5:enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。

解释:

先判满,满了,则无法插入,返回false

有空间,根据前文插入到下标为rear处,再rear要++

最后再通过rear的边界的处理的表达式处理rear 

6:deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。

解释: 

先判空,空了,则无法删除,返回false

能删,直接front++

最后再通过front的边界的处理的表达式处理front

7:Front: 从队首获取元素。如果队列为空,返回 -1 。

解释:直接返回front处的数据

8:Rear: 获取队尾元素。如果队列为空,返回 -1 。

解释:通过的前文的取队尾的rear的处理表达式来取队尾 

1:三目操作符 rear = rear==0?k:rear

2:取模:rear = (rear+k)%(k+1)

我用的第二种方法

9: 销毁队列

解释:先free a ,再free obj 

 

 

 

 

 

 

 

 

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

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

相关文章

python如何调用matlab python package库matlab转python安装包调用使用简单示例

说明(废话) 之前没有进行python调用过matlab,前面用matlab engine for python可以通过调用matlab的源码文件的形式可以调用工程,但是这又有一个问题,就是在运行的时候必须提供python和matlab的全部源码 该文章是通过matlab源码转python pack…

FPGA JTAG最小系统 EP2C5T144C8N

FPGA的文档没有相应的基础还真不容易看懂,下面是B站上对FPGA文档的解读(本文非对文档解读,只是为个人记录第三期:CycloneIV E最小系统板设计(一)从Datasheet上获取FPGA的基本参数_哔哩哔哩_bilibili 电源部份 核心电…

PlantUML 语法、图标和示例

基本语法 关键字 声明参与者的几个关键字 actor、boundary、control、entity、database、collections、participant 箭头样式 我们可以通过,修改箭头样式,来表达不一样的意思: 表示一条丢失的消息:末尾加 x让箭头只有上半部…

[UE 虚幻引擎] DTHmacSha 蓝图HMACSHA加密算法插件说明

本插件可以在虚幻引擎中使用蓝图对字符串和文件进行HMACSHA加密。 1.节点说明 HMACSHA一共有5种加密方式,分辨是 HMAC SHA-1, HMAC SHA-224,HMAC SHA-256,HMAC SHA-384,HMAC SHA-512。 本插件对每种加密方式提供3个节点…

C++初学者指南-6.函数对象--函数对象

C初学者指南-6.函数对象–函数对象 文章目录 C初学者指南-6.函数对象--函数对象函数对象示例:区间查询区间内的查找区间划分(分组) 指南标准库函数对象比较算术运算 函数对象 提供至少一个成员函数重载 operator() 的对象 class Multiplier {int m_; public:// cons…

MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、

一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件,提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中,你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例,展示了如何使用MATLAB的命令来实现正弦…

centos系统mysql主从复制(一主一从)

文章目录 mysql80主从复制(一主一从)一、环境二、服务器master1操作1.开启二进制日志2. 创建复制用户3. 服务器 slave1操作4. 在主数据库中添加数据 mysql80主从复制(一主一从) 一、环境 准备两台服务器,都进行以下操…

入门C语言Day15——关系条件逻辑操作符

今天来学习操作符中的一些内容,主要讲的是关系&条件&逻辑操作符 1.关系操作符 首先要来了解一下什么是关系操作符,关系操作符其实就是关系运算符,关系运算符又和关系表达式有关。 C语言中用于比较的表达式,就被称为 “关…

google、windows自带语音识别中英文等实时字幕使用

2、自带实时字幕 1)google浏览器自带 实时字幕 设置里可以设置: 有视频声音播放会弹出黑色文本框 下载其他语言包-比如中文: 测试 2)windows11 辅助功能 实时字幕 (直接快捷键打开:Win Ctrl L&#…

openmv学习笔记(24电赛笔记)

#opemv代码烧录清除详解 openmv的代码脱离IDE运行程序,只需要在IDE中将代码烧录道flash里面,断开IDE连接,上电之后,会自动执行main.py中的程序,IDE烧录的时候,会默认将程序后缀保存为 .py文件。 ​​​​​…

go语言day16 runtime包 临界资源 sync包

深入理解Java虚拟机到底是什么_java虚拟机是什么-CSDN博客 Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master rubyhan1314/Golang-100-Days GitHub runtime 类似jvm,runtime包也提供了垃圾回收功能。 并且jvm实现了对线程创建销…

自动化网络爬虫:如何它成为提升数据收集效率的终极武器?

摘要 本文深入探讨了自动化网络爬虫技术如何彻底改变数据收集领域的游戏规则,揭示其作为提升工作效率的终极工具的奥秘。通过分析其工作原理、优势及实际应用案例,我们向读者展示了如何利用这一强大工具加速业务决策过程,同时保持数据收集的…

vuepress搭建个人文档

vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录&#xff1a;项目研究创建时间&#xff1a;2024/7/23作者&#xff1a;星云<Xing…

Java响应式编程库Reactor的介绍和基本使用

关于响应式编程的概念和介绍可以参考: 响应式编程(Reactive Programming)是什么? Java语言中,RxJava和Reactor是实现响应式编程的两个最流行的库,因为 Spring 5 及更高版本中,Reactor 是 Spring WebFlux 的底层实现框架,用于构建响应式 Web 应用,所以相比而言,Reactor…

【docker】部署证书过期监控系统mouday/domain-admin

证书过期了再去部署证书容易被骂&#xff0c;就找了一个开源的证书过期系统来部署一下 过程 官方文档&#xff1a;https://domain-admin.readthedocs.io/zh-cn/latest/manual/install.html#docker 直接下载镜像是超时的&#xff0c;切换一下文档推荐的镜像源 新建docker配置…

WPF多语言国际化,中英文切换

通过切换资源文件的形式实现中英文一键切换 在项目中新建Language文件夹&#xff0c;添加资源字典&#xff08;xaml文件&#xff09;&#xff0c;中文英文各一个。 在资源字典中写上想中英文切换的字符串&#xff0c;需要注意&#xff0c;必须指定key值&#xff0c;并且中英文…

【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口

目录 ​编辑 QT窗口 窗口分类 菜单栏 创建菜单栏&#xff0c;菜单&#xff0c;菜单项 菜单栏 菜单 菜单项 添加分割线 添加槽函数 ​编辑 添加快捷键 工具栏 停靠位置 浮动属性 移动属性 添加快捷项 ​编辑 状态栏 ​编辑 添加标签 添加进度表 ​编辑…

【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !

目录 C语言指针精讲1. 什么是指针&#xff1f;1.1 指针的内存模型1.1.1 指针演示输出 1.2 指针运算1.2.1 指针算术运算输出1.2.2 指针与数组的关系输出 1.3 指针类型1.3.1 不同类型的指针示例输出1.3.2 void 指针输出 1.4 指针与内存管理动态内存分配输出 1.5 指针与内存泄漏1.…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下&#xff0c;不同服务之间频繁调用&#xff0c;对于某个具体的服务而言&#xff0c;可能会面临高并发场景。在这样的情况下&#xff0c;提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题&#xff0c;比如业务处理耗时过长、…

数据结构中的八大金刚--------八大排序算法

目录 引言 一&#xff1a;InsertSort(直接插入排序) 二&#xff1a;ShellSort(希尔排序) 三&#xff1a;BubbleSort(冒泡排序) 四&#xff1a; HeapSort(堆排序) 五&#xff1a;SelectSort(直接选择排序) 六&#xff1a;QuickSort(快速排序) 1.Hoare版本 2.前后指针版本 …