数据结构与算法-(8)---队列(Queue)

  🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~" 

 

目录

队列的概念及特点🍁

对比栈和队列 🍁

仿照栈写队列的第一种写法🍁

 仿照栈写队列的第二种写法🍁

 热土豆问题🍁


队列的概念及特点🍁

队列(Queue):是一种有次序的数据集合,其特征是新数据项的添加总发生在一端 (通常称为“尾rear”端)

特点:First in first out-先进先出,就像排队一样先到先得.
而现存数据项的移除总发生在另一端 (通常称为“首front”端)

A queue is an ordered collection of items队列是有序的集合 where the addition of new itemshappens at one end, called the “rear,” and the removal of existing itemsoccurs at the other end, commonly called the “front.(只能在对头出,队尾入)

新加入的数据项必须在数据集末尾等待而等待时间最长的数据项则是队首
这种次序安排排的原则称为(FIFO:First-infirst-out)先进先出

或“先到先服务first-come first-served”
队列的例子出现在我们日常生活的方方面面:排队
队列仅有一个入口和一个出口不允许数据项直接插入队中,也不允许从中间移除数据项

 

对比栈和队列 🍁

仿照栈写队列的第一种写法🍁

class Queue:#初始化函数def __init__(self):self.items = []def isEmpty(self):return self.items == []def enqueue(self,item):#入队--#队列的对头对应列表的尾部-1self.items.insert(0,item)def dequeue(self):return self.items.pop()def size(self):return len(self.items)

 仿照栈写队列的第二种写法🍁

class Queue:def __init__(self):self.items = []def isEmpty(self):return self.items  == []def enqueue(self,item):#队列的对头对应列表的头部0self.items.append(item)def dequeue(self):return self.items.pop(0)#将先进来的元素删除掉def size(self):return len(self.items)

 

注意:如果将pop(0)改为pop(),则会删除队列中最后添加元素不是最先添加的元素。这将导致队列的顺序被颠倒,不符合队列的FIFO(先进先出)原则。因此,我们需要使用pop(0)来删除队列中最先添加的元素

在Python中,pop()是一个内置的列表(list)方法,用于删除并返回列表中指定位置的元素。pop()方法接受一个可选参数索引,默认值为-1,表示要删除并返回最后一个元素。如果提供了索引,则会删除并返回指定位置的元素。

例如,对于以下列表:

lst = [1, 2, 3, 4, 5]

调用pop()方法:

lst.pop()

删除并返回最后一个元素5

[1, 2, 3, 4]

而调用pop(2)方法:

lst.pop(2)

则会删除并返回索引为2的元素3

[1, 2, 4, 5]

 热土豆问题🍁

“击鼓传花”的土豆版本
传烫手的热土豆,鼓声停的时候,手里有土豆的小孩就要出列

#stack queue 本质都是列表,通过函数实现不同进出class Queue:def __init__(self):self.items = []def isEmpty(self):return self.items  == []def enqueue(self,item):#队列的对头对应列表的头部0self.items.append(item)def dequeue(self):return self.items.pop(0)def size(self):return len(self.items)def hotPotato(namelist, num):simqueue = Queue()#实例化对象-模拟空队列for name in namelist:#入队simqueue.enqueue(name)#开始游戏while simqueue.size() > 1:#队列长度>1for i in range(num):#---相当于计数器  控制土豆传递数量0 - num-1simqueue.enqueue(simqueue.dequeue())#确定拿着热土豆的人---传递一次,通过for循环让一次传递重复n次print(str(simqueue.dequeue())+" is eliminated .")#将拿热土豆的人输出return simqueue.dequeue()#将唯一剩下的那个人返回print(hotPotato(["Bill","David","Susan","Jane","Kent","Brad"],7))#根据传递次数淘汰

 

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

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

相关文章

【AI视野·今日Robot 机器人论文速览 第五十三期】Thu, 12 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 12 Oct 2023 Totally 25 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Pixel State Value Network for Combined Prediction and Planning in Interactive Environments Authors Sascha Rosbach, St…

eclipse 配置selenium环境

eclipse环境 安装selenium的步骤 配置谷歌浏览器驱动 Selenium安装-如何在Java中安装Selenium chrome驱动下载 eclipse 启动配置java_home: 在eclipse.ini文件中加上一行 1 配置java环境,网上有很多教程 2 下载eclipse,网上有很多教程 ps&…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

思维模型 峰终定律

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。 1 峰-终定律的应用 1.1 迪士尼游乐园 迪士尼乐园采用了多种策略来创造令人难忘的体验,从而遵循峰终定律的原则。具体如下: 迪士尼乐园的入口设计和服务体验&…

基于workbench的PTFE矩形密封圈压缩回弹仿真分析

研究背景: 近年来随着工业发展和科技进步,高压容器使用场景逐渐增大,使用环境越发苛刻,如高温、高压以及内部压力的波动,这都对容器端面密封性能的要求更为严格。端面密封所用的密封件必须具备优良的回弹性能和耐化学…

【Vue基础-数字大屏】加载动漫效果

一、需求描述 当网页正在加载而处于空白页面状态时,可以在该页面上显示加载动画提示。 二、步骤代码 1、全局下载npm install -g json-server npm install -g json-server 2、在src目录下新建文件夹mock,新建文件data.json存放模拟数据 {"one&…

推荐《金田一少年事件簿》

天树征丸原作,佐藤文也作画的漫画 金田一少年事件簿 播报编辑讨论7上传视频 《金田一少年事件簿》是一部日本推理漫画。早期原作为金成阳三郎(后担任剧本),原作为天树征丸(前原案),由漫画家佐…

【教程】使用vuepress构建静态文档网站,并部署到github上

官网 快速上手 | VuePress (vuejs.org) 构建项目 我们跟着官网的教程先构建一个demo 这里我把 vuepress-starter 这个项目名称换成了 howtolive 创建并进入一个新目录 mkdir howtolive && cd howtolive使用你喜欢的包管理器进行初始化 yarn init 这里的问题可以一…

2023-2024-1 for循环-1(15-38)

7-15 输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份,即每个年…

前端TypeScript学习day04-交叉类型与泛型

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 交叉类型 泛型 创建泛型函数 调用泛型函数: 简化调用泛型函数: 泛型约束 指定…

Marin说PCB之BGA焊盘削焊盘带来的焊接问题和解决办法

每周日上午10点钟都是小编最开心的时间了,这个点是斗破苍穹播出的时间。小编我从萧炎从这个动漫开播到现在都追了好多年了,强烈推荐喜欢这个小说的可以看这个动漫,拍的还不错,只是萧炎的配音不再是张沛老师了,有点可惜…

基于Java的宠物领养管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

在 Windows 平台上启动 MATLAB

目录 在 Windows 平台上启动 MATLAB 选择 MATLAB 图标 从 Windows 系统命令行调用 matlab 从 MATLAB 命令提示符调用 matlab 打开与 MATLAB 相关联的文件 从 Windows 资源管理器工具中选择 MATLAB 可执行文件 在 Windows 平台上启动 MATLAB 选择以下一种方式启动 MATLAB…

105AspectRatio调整宽高比组件_flutter

AspectRatio组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比。 AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由宽 度和比率决定的,类似于 BoxFit 中的 contain,按照固定比率去尽量占满区域。 …

Java 继承与实现

一、继承(extends) 1.1 继承概念 继承是面向对象的基本特征,它允许子类继承父类的特征和行为,以提高代码的复用率和维护性等。下面一张图生动地展示了继承和类之间的关系: 继承图 上图中,“动物”、“食草…

数据结构与算法-栈

栈和队列是两种常用的线性结构,属于特殊的线性表,是线性表相关运算的一个子集。一般来说,线性表上的插入和删除操作不受任何限制,但栈只能在表的一端进行插入和删除操作,而队列则只能在一端进行插入操作,在…

物联网市场规模迅速增加,在交通、医疗、农业等方面发展势头迅猛

物联网(Internet of things)是一系列用于解决物的信息识别、交换、控制等技术的集合应用形成的网络。当连接从互联网时代的人与人走向万物互联,万物的数字化、智能化依赖物联网技术。因此,物联网是指利用各类信息识别设备&#xf…

Ceph介绍与部署

Ceph介绍与部署 一、存储基础1.1、单机存储设备1.1.1、单机存储的问题 1.2、商业存储解决方案1.3、分布式存储(软件定义的存储 SDS)1.3.1、分布式存储的类型 二、Ceph 简介三、Ceph 优势四、Ceph 架构五、Ceph 核心组件5.1、Pool中数据保存方式支持两种类…

Vue2实现图片预览功能 -- v-viewer:图片查看器

一. 先看效果图 二. 具体步骤 简介:一款基于 viewer.js 封装的Vue版插件,可用于图像查看,以及图片的旋转、缩放等功能预览 官网:v-viewer 文档说明:Vue图片浏览组件v-viewer,支持旋转、缩放、翻转等操作 - …

[小林coding]4.2TCP重传,滑动窗口,流量控制,拥塞控制_1013

1.重传 1.1 超时重传 两个情况: a 数据包丢失 b ack应答丢失 RTT:网络包往返的时间(不是一个定值) RTO:超时重传的时间间隔(也是一个动态的) RTO设置的时间长:浪费时间资源&…