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其实对原来的是不受影响的。。

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

在这里插入图片描述

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

在这里插入图片描述

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

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

相关文章

ProTable高级表格获取表单数据

隐藏高级表格中的收起按钮 手动控制高级表格中的搜索按钮 获取高级表格中的表单数据 Forminstance 引入 然后在代码中定义 const refForm useRef(); 使用 refForm.current.getFileDsValue();

单体进化微服务:拆分、注册、调用、网关、过滤、治理、分布式事务

这里写目录标题 基本介绍生产-消费-网关父依赖生产者服务消费者服务网关服务common服务 感想 基本介绍 Spring Cloud 是一个用于构建分布式系统和微服务架构的开发工具包。它提供了一系列的功能和组件,用于解决微服务架构中的常见问题,如服务注册与发现…

Git精讲

Git基本操作 创建Git本地仓库 git initgit clone 配置Git git config [--global] user.name "Your Name" git config [--global] user.email "emailexample.com"–global是一个可选项。如果使用了该选项,表示这台机器上所有的Git仓库都会使…

快时尚品牌Halara登上TikTok美国小店榜Top 5,运动健身风靡TikTok

TikTok Shop美国电商数据周榜(11/06-12)已出,具体信息如下: 上周总GMV达到5850万美元,日均出单840万美元;单日出单最高达2110万美元,是当前美国单日最高销售额; 截至11月12日&…

SpringBoot :ch01 项目结构

前言 在本系列博客中,我们将深入探讨 Spring Boot 项目结构的各个方面,并探讨如何利用这些结构来构建健壮、可扩展的应用程序。通过深入了解 Spring Boot 项目结构,我们可以更好地利用 Spring Boot 的优势,提高开发效率&#xff…

多目标应用:基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度(MATLAB)

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、基于非支配排序的蜣螂优化算法NSDBO 基于非支配排序的蜣螂优化算法NSDBO简介: https://blog.csdn.net/weixin46204734/article/details/128…

【ARM AMBA AXI 入门 13 -- AXI 协议中 RRESP 信号详细介绍】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI 协议中 RRESP 信号RRESP 使用举例RRESP 3bit 使用AXI 协议中 RRESP 信号 在 AXI (Advanced eXtensible Interface) 协议中,RRESP 信号用来表示读取事务的响应状态,它由从设备(Slave)发往主设备(Master)来通知读…

C#源代码生成器深入讲解二

在阅读本文前需掌握源代码生成器相关知识C#源代码生成器深入讲解一 C#源代码生成器深入讲解二—增量生成器 源代码生成器有个非常大的弊病,每次都会遍历所有的语法树来分析,这样就有个问题,每次可能只修改了很少一部分或者只有很少一部分的代码需要分析…

维基百科文章爬虫和聚类【二】:KMeans

维基百科是丰富的信息和知识来源。它可以方便地构建为带有类别和其他文章链接的文章,还形成了相关文档的网络。我的 NLP 项目下载、处理和应用维基百科文章上的机器学习算法。 一、说明 在我的上一篇文章中,展示了该项目的轮廓,并奠定了其基础…

C#中的is和as的使用和区别

目录 概述一、is操作符1. is操作符的语法2. is操作符的用途3. is操作符的使用示例4. is操作符与typeof操作符的区别 二、as操作符1. as操作符的语法2. as操作符的用途3. as操作符的使用示例4. as操作符与is操作符的区别和联系5. as操作符与is操作符的区别总结 概述 在C#编程语…

深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序 计算机竞赛

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习?5.1.2 为什么要迁移学习? 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…

c++语言核心及进阶

核心编程 内存分区模型 根据c执行将内存划分为5个区域: 代码区,存放函数体的二进制,即CPU执行的机器指令,并且是只读的;常量区,存放常量,即程序运行期间不能被改变的量。全局区(静…

练习八-利用有限状态机进行时序逻辑的设计

利用有限状态机进行时序逻辑的设计 1,任务目的:2,RTL代码,及原理框图3,测试代码,输出波形 1,任务目的: (1)掌握利用有限状态机实现一般时序逻辑分析的方法&am…

淘宝商品详情接口,商品属性接口,商品信息查询,商品详细信息接口,h5详情,淘宝APP详情

淘宝商品详情API接口可以使用淘宝开放平台提供的SDK或API来获取。这些接口可以用于获取商品的详细信息,如标题、价格、描述、图片等。 以下是使用淘宝开放平台API获取商品详情的步骤: 注册淘宝开放平台账号,并创建应用,获取应用…

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

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

7-tcp 三次握手和四次挥手、osi七层协议,哪七层,每层有哪些?tcp和udp的区别?udp用在哪里了?

1 tcp 三次握手和四次挥手 2 osi七层协议,哪七层,每层有哪些 3 tcp和udp的区别?udp用在哪里了? 1 tcp 三次握手和四次挥手 # tcp协议---》处于osi7层协议的传输层,可靠连接,使用三次握手,四次挥…

PLC通过Modbus转profinet网关读取并控制恒压供水系统中的变频器频率

PLC通过Modbus转profinet网关读取并控制恒压供水系统中的变频器频率 PLC通过Modbus转Profinet网关(XD-MDPN100)在恒压供水系统中读取变频器的频率。该系统实时监控逆变器的频率,以确保水的供应能够保持恒定的压力。PLC通过Modbus与变频器通信,将读取的频…

Redis高可用之持久化

Redis的高可用 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365),99.9%后面的小数点越多说明越可靠。Redis 的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性。 redis中高可用技术种类 1…

Altium Designer学习笔记3

原理图生成PCB: 然后是手动布局: 可以看到先没有交叉。 最终再走线。 另外,了解下这个封装的一些概念。

线程的面试八股

Callable接口 Callable是一个interface,相当于给线程封装了一个返回值,方便程序猿借助多线程的方式计算结果. 代码示例: 使用 Callable 版本,创建线程计算 1 2 3 ... 1000, 1. 创建一个匿名内部类, 实现 Callable 接口. Callable 带有泛型参数. 泛型参数表示返回值的类型…