数据结构-leetcode(设计循环队列)

1.学习内容:

今天 我们讲解一道能够很好的总结所学队列知识的题目---设计循环队列

 622. 设计循环队列 - 力扣(LeetCode)

 2.题目描述:

让我们设计一个队列  要求是循环的 这和我们的双向链表有些类似

让我们按要求设计出这些相对应函数 

此题目特殊之处在于 “满了就不能再插入”“循环如何判断满和空”圈起来后面要用到

 

3. 题目思路:

为了解决以上问题 我们要先设计我们的解题思路

设计循环队列,那我们是选择用数组处理还是选择用链表处理呢? 为什么?

 先给答案:  建议用数组 

为什么:  首先我们用front指向头  back指向队尾的下一个 使用链表确实可以在判断为空为满部分很快捷 我们只需要判断back->next 是否等于 front即可 但是唯独在取队尾时不方便 这时候我们可以选择采用双向链表 或者增加一个back->prev的指针来表示上一个 但哪怕是采用双向链表 对于我们来说依旧不是很友好 我们还需要新建节点 释放等等 在难度上和数组大差不差 所以我们还是选择数组来解决

 首先,我们要解决一开始提到的问题------“满了就不能再插入”“循环如何判断满和空”

 我们有两种解决方案

先上示意图

1.  采用size  新增加一个size  size==0时 也就是front==back为空  size != 0 就是满

 2.采用新开辟一个空间 因为我们使back指向队尾的下一个 所以每次赋值后++back  

所以当  (back+1)% (k+1) == front 时就是满的情况 黄色位置就表示插入满后back的指向

此时就可以完美解决无法判断满和空的区别

 

 

 

 接下来我们解决其他函数:插入和删除

首先进行插入判断: 为空不能插入 返回false   back指向下一个位置++  

核心:  当我的back小于我开辟的k+1个空间时 怎么%取的都是back的下标

但当他满了的时候 需要让他的下标重新返回0  所以 obj->back %= (obj->k+1);是专门为返回原下标也就是他满了的时候准备的 同理 front也一样 不进行二次赘述

第三重点:返回rear

 有两种表示方法 上面的很好理解 就是back为空或者满直接返回队尾元素

重点是下面的

这个表示相当于在原先back满了要循环的情况下  不进行循环 直接在后面添加

也就是back为0的情况下       当back为0  back-1就代表数组下标越界 

这个时候为他加上我的空间长度 k+1  再%k+1    就可以返回任意情况 包括front不在第一位

因为如果back没满时     back-1  %   k+1   就会直接返回back-1 

而   back == 0      k+1就发挥作用了    

以上就是本题的大致讲解 下面将附下全代码仅供参考

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

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

相关文章

戳穿人工智能的六个谎言:辨别真伪

目录 1. AI是智能的 2. 始终越大越好 3. AI毫无透明度和问责制可言 4. AI一贯正确 5. AI严重冲击就业市场 6. AI主宰人类 主要结论 相关拓展 人工智能(AI)无疑是我们这个时代的流行语。特别是随着ChatGPT等生成式AI应用程序的出现,A…

前端实现菜单快速检索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

谈思生物医疗直播 | 利用类器官模型研究肺的发育与稳态

类器官是一种三维细胞培养物&#xff0c;其在细胞类型&#xff0c;空间结构及生理功能上能够模拟对应器官&#xff0c;从而提供一个高度生理相关的系统。自2009年小肠类器官首次建立至今&#xff0c;类器官研究已经延伸到多个组织系统&#xff0c;并成为当下生命科学领域最热门…

【PPspliT】ppt转pdf-保留过渡动画

网址 http://www.maxonthenet.altervista.org/ppsplit.php 下载安装 使用 再次打开ppt&#xff0c;就能在上方的选项栏里头看到了&#xff1a;

玩具礼品经营配送小程序商城作用是什么

玩具礼品所覆盖的需求人群年龄阶层非常广&#xff0c;尤其是孩子们乃至年轻人比较喜欢的&#xff0c;也因此无论线下还是线上都不缺各种店铺&#xff0c;传统商家主要以自然流量和线上开广告、一堆图文等方式分享获得生意。 然而如今随着互联网电商冲击&#xff0c;线下店铺流…

JMeter集结点的使用场景以及如何使用?

JMeter是一个开源的负载测试工具&#xff0c;它被广泛用于测试应用程序、Web服务和网络协议等的性能。在JMeter中&#xff0c;集结点&#xff08;JMeter Cluster&#xff09;是一种分布式测试环境&#xff0c;它允许多个JMeter实例同时工作来模拟高并发负载。 使用集结点的场景…

群晖NAS搭建WebDav服务做文件共享,可随时随地远程访问

文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选框 2. 局域网测试WebDav服务2.1 下载RaiDrive客户端2.2 打开RaiDrive&#xff0c;设置界面语言可以选择中文2.3 点击添加按钮&#xff0c;新建虚拟驱动区2…

露营管理系统预约小程序效果如何

旅游经济已经复苏&#xff0c;并且市场规模增速加快&#xff0c;近一年来远途/周边游客户增多&#xff0c;不少旅游景区在节假日常常面对客流爆满现象。同时露营作为近几年突然火热的项目&#xff0c;其需求也是日渐上升。 然而在高需求的同时&#xff0c;我们也看到露营经营痛…

通过JDBC连接MySQL实现表的插入和查看语句

1.插入语句 因为插入,删除,更新数据操作差不多,我们这里仅仅介绍插入的方法,我们将不使用dbdriver的方式操作,因为这个操作使用的是反射,我们不推荐,下面我们开始正式介绍插入的操作 1.导入库 在官网上搜索jdbc连接的jar包,下载后粘贴到项目路径下,然后选中右击加入库即可 2.创…

碳化硅MOS/超结MOS在直流充电桩上的应用-REASUNOS瑞森半导体

一、前言 直流充电桩是新能源汽车直流充电桩的简称&#xff0c;一般也被叫做“快充”。直流充电桩一般与交流电网连接&#xff0c;可作为非车载电动汽车的动力补充&#xff0c;是一种直流工作电源的电源控制装置&#xff0c;可以提供充足的电量&#xff0c;输出电压和电流可以…

python+pytest接口自动化:token关联登录这样做,阿里p8都直呼牛逼!!!

在PC端登录公司的后台管理系统或在手机上登录某个APP时&#xff0c;经常会发现登录成功后&#xff0c;返回参数中会包含token&#xff0c;它的值为一段较长的字符串&#xff0c;而后续去请求的请求头中都需要带上这个token作为参数&#xff0c;否则就提示需要先登录。 这其实就…

TikTok历史探秘:短视频中的时间之旅

在数字时代的浪潮中&#xff0c;TikTok崭露头角&#xff0c;成为社交媒体领域的一颗耀眼新星。这款短视频应用以其独特的创意、时尚和娱乐性质&#xff0c;吸引了全球数以亿计的用户。 然而&#xff0c;TikTok并非一夜之间的奇迹&#xff0c;它背后蕴藏着丰富而有趣的历史故事…