数据结构-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.mfbz.cn/a/182427.html

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

相关文章

视频云存储EasyCVR平台国标接入获取通道设备未回复是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Python中的解析器argparse

import argparse## 构造解析器 argparse.ArgumentParser() parse argparse.ArgumentParser(description"caculateing the area of rectangle")## 添加参数 .add_argument() parse.add_argument("--length",typeint,default20,helpThe length of rectangle…

西米支付:如何设计和构建游戏支付系统?

如何设计和构建游戏支付系统? 目前,游戏开发中最常见的支付方式包括微信支付、支付宝支付和苹果支付等。今天,我将与大家分享游戏支付系统的架构和设计。 游戏支付的主要业务流程是指游戏玩家在游戏中购买虚拟物品或服务所进行的支付过程。一…

深入了解Java8新特性-日期时间API_LocalDate类

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概12000多字,预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&…

使用 PowerShell 中的命令来删除共享目录

Remove-SmbShare -Name "ShareName" 请将 "ShareName" 替换为您要删除的实际共享目录的名称。 请注意,执行此命令需要具有适当的权限。确保您以管理员身份运行 PowerShell 或具有足够的权限来删除共享目录。

超详细的自动化测试教程

什么是自动化测试? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念,广义上来讲&a…

微信小程序汽车租赁系统

微信小程序汽车租赁系统 本系统包含了3类用户,分别为客户、员工以及管理员,客户主要是满足自身的租车需求,员工主要负责车辆的调度问题和维修状况,管理员则是主要对人员、车辆和订单的管理。以下是对各自功能的详细介绍: 客户可…

简单聊聊加密和加签的关系与区别

大家好,我是G探险者。 平时我们在项目上一定都听过加密和加签,加密可能都好理解,知道它是保障的数据的机密性,那加签是为了保障啥勒?它和加密有啥区别? 带着这个疑问,我们就来聊聊二者的区别。…

测试15k薪资第1步 —— 自动化测试理论基础

目录 1、自动化测试定义 2、自动化测试分类&工具 3、未来发展趋势 1.1、什么是自动化测试 自动化测试指的是利用软件工具或脚本来执行测试任务,以替代手动测试过程的一种测试方法。它的主要目的是通过自动化执行、验证和评估软件应用的功能、稳定性、性能等方面…

Redis(哨兵模式)

哨兵模式的定义: 是Redis的一种高可用解决方案,通过运行多个Redis实例来监控主从Redis实例的状态,当主实例出现故障时,哨兵会自动选举一个从实例作为新的主实例,从而保证系统的高可用性。哨兵模式可以监控多个主从Red…

HCIP---MPLS---LDP

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 MPLS 基于标签转发表进行转发,与路由表类似,标签转发表有两种获取渠道:一是手动配置(类似静态路由),二是通过协议自动学习(类似OSPF)。手动配…

ubuntu搭建phpmyadmin+wordpress

Ubuntu搭建phpmyadmin wordpress Linux系统设置:Ubuntu 22配置apache2搭建phpmyadmin配置Nginx环境,搭建wordpress Linux系统设置:Ubuntu 22 配置apache2 安装apache2 sudo apt -y install apache2设置端口号为8080 sudo vim /etc/apache…

【MISRA-C 2012】浓缩版解读

文章目录 1、前言2、简介2.1、如何看待MISRA-C 20122.2、准则(guidelines)里面的指示(Directive)和规则(Rule)2.3、准则(guidelines)的级别(Category) 3、若干重要的Directive和Rule3.1、指示(Directive)Dir 2.1(必要) 所有的源文件编译过程不得有编译错…

【机器学习 | ARIMA】经典时间序列模型ARIMA定阶最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

2023年广东成考成绩公布!分数线也出来了!

广东考试院最新公布,参加2023年成人高考的考生,在今天(11月23日)18:20分后将受到官方的成绩短信。 考生也可以通过考试院小程序和官网网站查询成绩。 另外,考生收到的短信分数为卷面分,不含25岁年龄加分&am…

RAD Studio 12 IDE 界面主题设置

RAD Studio 12 IDE 界面主题设置 RAD Studio 12 IDE 界面主题设置RAD Studio 安装完成后自身默认背景界面高亮的,由于长期编程累眼,一般要自己设置暗色界面。具体操作如下: Light 浅色或 Dark 深色主题Tools->Options->User Interf…

【LeetCode刷题】--59.螺旋矩阵II

59.螺旋矩阵II class Solution {public int[][] generateMatrix(int n) {int[][] res new int[n][n];int count 1;int left 0,right n-1,top 0,bottom n -1;while(left < right && top < bottom){for(int col left;col < right;col){ //从左往右res[to…

超级利器!Postman自动化接口测试让你提升测试效率,节省宝贵时间!

Postman自动化接口测试 该篇文章针对已经掌握 Postman 基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 当前环境&#xff1a; Window 7 - 64 Postman 版本&#xff08;免费版&#xff09;&#xff1a;Chrome App v5.5.3 …

unity shaderGraph实例-可交互瀑布

不要问我水在哪里&#xff0c;你自己相像这是一个瀑布&#xff0c;瀑布的效果我还不会做 效果展示 整体结构 这里片元着色器最后输出的baseColor应该是黑色&#xff0c;白色为错误。 各区域内容 区域1 计算球到瀑布的距离&#xff0c;然后减去一个值&#xff0c;实现黑色区域…

大模型增量预训练参数说明

在增量预训练过程中通常需要设置三类或四类参数,模型参数,数据参数,训练参数,额外参数。 下面分别针对这四种参数进行说明。 欢迎关注公众号 模型参数 model_type模型类型,例如bloom,llama,baichuan,qwen等。 model_name_or_path模型名称或者路径。 tokenizer_name_or…
最新文章