数据结构-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.mzph.cn/news/162515.shtml

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

相关文章

Navicat 技术指引 | GaussDB 数据查看器

Navicat Premium(16.2.8 Windows版或以上) 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…

220V转12V固定输出12V非隔离芯片WT5106WT5105

220V转12V固定输出12V非隔离芯片WT5106WT5105 今天给大家介绍一款实用芯片,WT5106。它是一款高效率高精度的非隔离降压开关电源恒压控制驱动芯片。 WT5106适用于85VAC~265VAC全范围输入电压的非隔离Buck、Buckboost拓扑结构,小家电、电机驱动、继电器驱…

量子计算争霸战加码?美国将拨款30亿美元发展量子计算

(图片来源:网络) 美国众议院科学、太空和技术委员会认为,如果不采取措施加速量子计算系统的发展,美国将落后于俄罗斯和中国。 因此,该小组的领导人——主席Frank Lucas(共和党)和高…

基于 Modbus 的工业数据采集、控制(part 3)

Modbus 设备(利用 slave 模拟) Modbus 采集程序 client.c #include "client.h"modbus_t *ctx; key_t key_shm, key_msg; int shmid, msgid; struct shm *shm0; struct msgbuf msg0;void *collector(void *arg) {struct shm *p = (struct shm *)arg;while (1){sle…

改进YOLOv5 | C3模块改动篇 | 轻量化设计 |骨干引入动态卷积|CondConv

🗝️YOLOv5实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv5:我的专业笔记与技术总结   -- YOLOv5轻松上手, 适用技术小白,文章代码齐全,仅需 …

信号功率放大器的工作原理和特点是什么

信号功率放大器是一种电子设备,用于将输入信号的功率进行放大,以达到所需的输出功率水平。它在各个领域中都有广泛的应用,包括音频放大器、射频放大器、激光功率放大器等。下面将详细介绍信号功率放大器的工作原理和特点。 工作原理&#xff…

Git使用基础总结(从小白到新手版)

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

OpenAI“宫斗”新进展!Sam Altman将重返OpenAI担任首席执行官 董事会成员改动

在经过激烈的五天讨论和辩论之后,高调人工智能初创公司OpenAI宣布,其联合创始人之一Sam Altman将回归担任首席执行官。这一决定是对上周Altman突然被解雇的回应,该决定引起了极大的关注和讨论。 OpenAI表示,他们已经达成了与Altm…

德迅云安全-德迅卫士:保障您的主机安全

主机安全是指保证主机在数据存储和处理的保密性、完整性、可用性,包括硬件、固件、系统软件的自身安全,以及一系列附加的安全技术和安全管理措施。 为什么要主机安全? 服务器一旦被黑客入侵,个人和企业面临以下安全风险&#xff…

张弛声音变现课,如何为偶像剧配音?

在为偶像剧进行配音工作时,配音员应当捕捉剧中角色的年轻活力、浪漫的爱情故事以及轻快的生活节奏。偶像剧主要讲述的是青春的爱恋、友谊和梦想追求,因此配音需要传递出剧中的真诚和活泼。为偶像剧配音可以考虑以下几点建议: 鲜明活泼的声音 …

如何判断交流回馈老化测试负载是否合格?

交流回馈老化测试负载是用于模拟实际工作环境中设备运行状态的测试工具,主要用于检测设备的耐久性和稳定性。 负载性能:需要检查负载的性能是否符合设计要求,这包括负载的功率、电流、电压等参数是否在规定的范围内,以及负载的工作…

【AI】行业消息精选和分析(11月23日)

今日动态 1、Sam Altman 重掌 CEO,OpenAI 权力斗争正式「落幕」 2、重磅好消息:语音 ChatGPT 现已向全用户开放 3、NVIDIA 与基因泰克合作,利用生成式 AI 加速药物发现 4、 英伟达Q3营收同比增长206%至181亿美元 黄仁勋:生成式AI时…

Zoho Bigin和标准版CRM有什么区别?

Zoho Bigin是Zoho公司推出的一款针对小微企业设计的CRM系统,它与Zoho CRM一脉相承,但更加轻量级,快速帮助小微企业实现数字化销售。下面来说说,Zoho Bigin是什么?它适合哪些企业? 什么是Zoho Bigin&#x…

【c语言】重温一下动态内存,int数组过大会造成栈错误

项目场景: 项目场景:互助群同学在刷题的过程中,遇到的一个题目,需要申请一个很大数组,于是这个同学就写了int[1000000],其实这样写也没有错,可是运行后却显示栈错误。于是就找到我来请教,我想就…

从零开始的c语言日记day36——指针进阶

一、什么是指针: 指针的概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 ⒉指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针是有类型,指针的类型决定了指针的-整数的步长,指针解引用操作的时候的权限。…

玻璃加工ERP包含些模块?玻璃加工ERP好用吗

玻璃制品的类型多、规格不一、营销策略灵活、销售渠道广泛、生产关联业务环节。在当今这个市场竞争日益激烈的时代,如何有效整合各个业务环节,提升多部门协作效率,随时进行数据分析等,是每个玻璃加工企业面临的管理难题。 在数字…

【C语法学习】27 - 字符串转换为数字

文章目录 1 atoi()函数1.1 函数原型1.2 参数1.3 返回值1.4 转换机制1.5 示例1.5.1 示例1 1 atoi()函数 1.1 函数原型 atoi():将str指向的字符串转换为整数,函数原型如下: int atoi(const char *str);1.2 参数 atoi()函数只有一个参数str&…

docker部署paddleocr

内容仅供参考学习 欢迎朋友们V一起交流: zcxl7_7 环境 1. CentOS7  2. docker  3. PaddleOCR2.5.2 1.准备 1. 首先准备好需要打包的项目 2. 在该项目中创建Dockerfile文件 touch Dockerfile2. 编写Dockerfile # 从Python 3.8的官方镜像中创建(pyt…

matlab使用scatter函数画图时报错“数组索引必须为正整数或逻辑值”解决办法

一、背景 在使用matlab的scatter函数画图时报错“数组索引必须为正整数或逻辑值”。 scatter函数说明:scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形标记的散点图。 二、解决办法 如果使用scatter函数时报上述错误,尝试将连续函数先转换为函…

ubuntu编译sqlite3并使用

SQLite3是一种轻量级的关系型数据库管理系统,它是在C语言基础上实现的。SQLite3具有许多优点,例如: 1.灵活:它可以在多种操作系统上运行,并且可以将多个数据库文件合并成一个文件。 2.易于使用:SQLite3使用…