leetcode——设计循环队列

在这里插入图片描述
设计循环队列

在这里插入图片描述
这个题目在这里小编只分享一个解题思路,因为还有一个思路小编还在尝试,一直过不了,还在这里不断尝试,等我试出来的时候我在分享给大家,首先我们在这里给出的是数组的形式,后面在分享单链表的思路,因为数组在内存上是连续的,这里给出的思路是多开出一个空间的内存,然后我们在进行插入和删除,下面给一个图来给大家来看看。
在这里插入图片描述
我们可以看到我们这个数组其实是来存储四个字节大小的,但是我们多存储一个int类型大小的空间,如果tail+1 == head的话我们就当空间是满的。但是当我们的head是和tail相等的时候我们就可以认为是空的,所以这里多开一个空间的作用就出来了,就是可以保证这两个有区别,如果我们不是多开一个空间的话,我们怎么来保证他是满的还是空的。


因为我们是tail是指向数组有效空间的最后一个元素的,所以我们这里不多开一个空间的话,就无法来区别什么时候为空,什么时候是满的时候。我们先来看看他的一个接口函数。

在这里插入图片描述
让我们来定义这个循环队列是什么个样子的,首先我们得有一个数组来存储,然会k就是题目说的循环队列里面要存储的数据个数,还有我们得有两个来指向head和tail,其实也可以是指针,但是我们这里用数组下标的方式才是最好的。
有了结构体之后下一个就是给的初始化的函数接口,首先肯定就是结构体中a这个指针,我们得给他malloc一个数组空间出来,其次就是head和tail这两个得初始化为一个值,因为我们后面是有判空的一个接口函数,所以这里并不难分析出来一开始的时候就得给初始化成一样的值,所以这里给0是最合适的,是刚开始的时候没有一个数据存储在里面。

在这里插入图片描述
这里大家可能对这个结构体会有疑问。

在这里插入图片描述
我们一开始就得开辟空间给obj这个指针,他得指向一个有效空间,大小刚刚好就是结构体的大小,然会a在这个结构体中其实就是一个指针大小,因为我们后面只需要让他指向一个数组空间大小就行了。

后面的判空函数就显得格外简单了

在这里插入图片描述
只要是相等的时候,就是空,不只是第一次,我们可以看后面的插入和删除如果出现head和tail是相等的时候这个时候也是为空的
在这里插入图片描述
进行下面的操作之后就是head和tail相等的时候,和我们判断空的时候是一样的,然后需要进行的下一个接口函数就是我们来判断是不是满的时候,因为我们设定的时候tail就是指向后最后一个元素的后面一个元素,所以满的时候就是tail+1 == head的时候,但是我们这个是个循环队列,比如在下面这个图的时候,满的时候进行+1就是越界的行为
在这里插入图片描述
就是这个时候,如果我们进行+1就是5,那我们这里进行的操作就是用一个取模的方法才是最好的,我们知道当我们一个数模上一个比他大的数的时候还是自己本身,所有这里我们可以先让tail+1因为大多的情况下的时候tail是在中间位置,满了的话head就是他的下一个,所有我们这里还需要进行的操作就是在加上一个k+1,这样的话那就可以保证tail是最后位置的时候取模也不会是0.我们在模上一个k+1就可以解决了。

在这里插入图片描述
所以我们写成这样就可以解决问题,这里取模的好处就是刚刚好满足循环,我比你大了,我取模就又可以回来了,解决了如何给他循环起来的问题,如果我们用单链表的就写一个循环链表我们来存储数据就可以解决了。

下一个接口函数就是如何进行插入和删除。我们这里插入就是让我们的tail位置放入数据,然后进行插入就可以解决问题,但是插入之后我们tail得往后移动,但是这里最大的问题就是如果tail到尾巴的时候,我们再进行++又就是越界,那leetcode就会给你一个越界访问的提示,所以这里最好的办法还是取模就可以解决这个问题了,首先就是我们tail得+1,然后因为取模的话我们得先给他加上一个数,这个数要不影响最后的结果,取模的最大左右就是当我们给出一个超大数的时候,最后的结果也是模的那个数和0之间,比如我们模上这里的k+1,然后取模的范围就是0—k+1

在这里插入图片描述
所以我们上面就可以写成这个样子,如果满了的话就不能插入,因为这里返回值是个bool值,所以我们的返回值就是true和false

既然插入需要判断,那删除也是需要判断的,所以空了我们就不要进行删除了。

在这里插入图片描述
这里也是用了这样的方法,其实取模大家可以多带几个数进行感觉,光说的话理解起来是特别的难受的。

在这里插入图片描述
去对头的话直接返回就行,但是去队尾的话需要进行一些操作,因为我们规定的是tail后面的元素,所以要返回的应该是tail前面的一个元素的值,那因为tail可能是再数组下标为0位置的地方,所以我们这里就应该用取模,其实大家发先我们就是加上(k+1)的这个值然后整体取%(k+1),(k+1)%(k+1)就是0其实对原来的是不受影响的。。

在这里插入图片描述
还有就是我们应该怎么来释放我们的空间,看下面的图就是可以知道先后顺序了。

在这里插入图片描述

那今天的分享就到这里,我们后面再见。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP手动为第三方类添加composer自动加载

有时候我们要使用的第三方的类库(SDK)没用用composer封装好,无法用composer进行安装,怎么办呢??? 步骤如下: 第一步、下载你需要的SDK文件包,把它放在vendor目录下 第二…

mricorn 手动勾画ROI并保存为模版的方法步骤

mricorn软件手动勾画ROI: 这里拿一个做了切除手术的癫痫病人举例子,我们需要把切除区域勾画出来并保存成切除的模版。 1、将图像导入到mricorn中 2、逐层勾画ROI并填充 比较方便的是从切除区域的起始层进行勾画,这里为了方便展示只勾画中间…

重装系统后如何恢复以前的文件?详细教程大揭秘!

在日常生活中,我们可能会遇到各种计算机问题,其中最严重的问题之一就是需要重装系统。在重装系统之前,我们通常需要考虑一个问题:重装系统后还能恢复以前的文件吗? 首先,我们需要明确一点,重装…

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍; 1. 低成本:用户通过手机APP下单,省去了中介费用,降低了雇主的雇佣成本。 2. 高收入:家政服务人员通过手机APP接单,省去了中介费用,从而提高了服务人员的…

AI越来越强,法律人是“躺”还是“卷”?

要点: 一、AI:到底是风口还是泡沫? 二、法律人为什么要学会用AI? 三、法律人为何用不好AI? 四、法律人的明天会怎样? 五、人类的明天会怎么样? 六、不确定的未来:“躺”还是“…

转行数据分析,一定要学会做BI报表

不开玩笑,现在的大趋势是做BI数据分析,所以如果是想要入行数据分析的,那么就需要学会做BI报表。现在很多的企业都在上BI,数据分析老人们也都在积极地学习使用BI,很大程度上是因为BI报表具备了无可替代的三大优势。 BI…

Ubuntu18.04安装LeGO-LOAM保姆级教程

系统环境:Ubuntu18.04.6 LTS 1.LeGO-LOAM的安装前要求: 1.1 ROS安装:参考我的另一篇博客Ubuntu18.04安装ROS-melodic保姆级教程_灬杨三岁灬的博客-CSDN博客文章浏览阅读168次。Ubuntu18.04安装ROS-melodic保姆级教程https://blog.csdn.net/…

C语言——深入理解指针——函数指针

一、函数指针变量 1.1 函数指针变量的创建 什么是函数指针变量呢&#xff1f; 函数指针变量应该是用来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#xff1f; 我们做个测试&#xff1a; #include <stdio.h> void test() {print…

解决Python中文乱码问题的策略与技巧

目录 引言 一、解决Python中文乱码问题的策略 1、使用合适的编码方式 2、设置Python解释器的编码环境变量 3、使用合适的库和框架 4. 对数据进行正确的处理和格式化 5、使用合适的打印和显示方式 6. 考虑使用多语言支持 二、解决Python中文乱码问题的技巧 1、避免使用…

Chrome和chromedriver版本不匹配导致的UI自动化测试无法运行的问题

今天&#xff0c;遇到一个小问题&#xff0c;本来跑的好好UI自动化测试脚本突然不好使了&#xff0c;期初怀疑是页面元素有调整导致脚本出现异常无法正常执行&#xff0c;经排查后发现近期页面没有任何调整。 这下头大了&#xff0c;啥也没改&#xff0c;怎么好好的脚本不能跑…

Python+Selenium自动化测试项目实战

说明&#xff1a;本项目采用流程控制思想&#xff0c;未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码&#xff0c;验证是否登录成功&#xff1b; 2.输入格式正确的用户名和不…

UE5 操作WebSocket

插件&#xff1a;https://www.unrealengine.com/marketplace/zh-CN/product/websocket-client 参考&#xff1a;http://dascad.net/html/websocket/bp_index.html 1. 安装Plugings 2.测试websocket服务器 http://www.websocket-test.com/ 3.连接服务器 如果在Level BP里使用&a…

CrystalDiskInfo/CrystalDiskMark/DiskGenius系统迁移

CrystalDiskInfo 主要用于看硬盘的各种信息&#xff0c;包括但不限于硬盘通电时间、通电次数、硬盘好坏状态 CrystalDiskMark 主要用于测试硬盘的读写速度、连续读写速度 DiskGenius 主要用于通过U盘装操作系统后进行&#xff0c;磁盘分区&#xff0c;更改磁盘名、隐藏部分…

PGFNet

方法 MFRM means ‘multi-modal feature refinement mechanism’&#xff0c;MMAFM means ‘multi-modal and multi-scale attention fusion model’&#xff0c;RPM means ‘residual prediction module’ scale attention weights U R S _R^S RS​,U D S _D^S DS​ enhan…

释放搜索潜力:基于Docker快速搭建ES语义检索系统(快速版),让信息尽在掌握

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

使用 RAFT 的光流:第 1 部分

一、说明 在这篇文章中&#xff0c;我们将了解一种旗舰的光流深度学习方法&#xff0c;该方法获得了 2020 年 ECCV 最佳论文奖&#xff0c;并被引用超过 1000 次。它也是KITTI基准测试中许多性能最佳的模型的基础。该模型称为 RAFT&#xff1a;Recurrent All-Pairs Field Trans…

纽扣电池类产品上架亚马逊澳大利站认证标准要求AS/NZS 62368

纽扣电池一般来说常见的有充电的和不充电的两种&#xff0c; 充电的包括3.6V可充锂离子扣式电池(LIR系列)&#xff0c;3V可充锂离子扣式电池(ML或VL系列)&#xff1b;不充电的包括3V锂锰扣式电池(CR系列)及1.5V碱性锌锰扣式电池(LR及SR系列)。 澳大利亚*已经发布了经批准的《消…

女儿冬天的第一件羽绒服,这也太好看了

分享女儿的时尚穿搭 撞色插肩款羽绒服 同色系的精彩碰撞 描绘出绚烂的色彩 走在街上就是最靓的崽 显肤色显瘦超吸睛 妥投时尚小潮人一枚

pytest-rerunfailures插件之测试用例失败重跑

环境前提&#xff1a; 只有同时满足一下先决条件才能使用pytest-rerunfailures ①python的版本不能过低&#xff1b; ②pytest 5.0或更高版本&#xff1b; 背景&#xff1a; 平时在做接口测试的时候&#xff0c;经常会遇到网络抖动或者环境问题导致测试用例运行失败&#x…

利用人工智能打破应试教育惯性促进学生思维活化与创新能力培养的研究

全文均为人工智能独立研究完成 应试教育导致学生迷信标准答案惯性导致思维僵化-移动机器人-CSDN博客 用AI魔法打败AI魔法-CSDN博客 课题名称建议&#xff1a;“利用人工智能打破应试教育惯性&#xff0c;促进学生思维活化与创新能力培养研究”。 这个课题名称明确指出了研究的…