你好,我是久远,上次我们进行了关于栈的讲解,我们先来对知识进行回顾:

  • 什么是栈

栈是有序集合,队列元素的增添和移除总是发生在同一端的,这一端我们称之为栈顶,另一端称之为栈底,栈中的元素离底端越近,代表其在栈中的时间越长,最新添加的元素将被最先移除。这种排序原则被称作 LIFO(last-in first-out),即后进先出。它提供了一种基于在集合中的时间来排序的方式。最近添加的元素靠近顶端,旧元素则靠近底端。

  • 栈的重要操作

栈中最重要的两个操作是出栈和入栈,我们在 python 中一般通过列表来实现栈的出入。

接下来我们来进行队列的学习,队列和栈一样,是非常简单的数据结构,但是也是非常常见的数据结构。


什么是队列

队列和栈一样,也是有序集合,但它不同于栈的地方在于,队列中的元素是从一端进入,另一端出去。添加操作发生在“尾部”,移除操作则发生在“头部”。新元素从尾部进入队列,然后一直向前移动到头部,直到成为下一个被移除的元素。最新添加的元素必须在队列的尾部等待,在队列中时间最长的元素则排在最前面。这种排序原则被称作 FIFO(first-in first-out),即先进先出,也称先到先得。

队列字如其名,它的例子在生活中也是比比皆是的,我们现实中的排队即为队列的应用。

日常生活中,我们进电影院要排队,在超市结账要排队,好的队列只允许一头进,另一头出,不可能发生插队或者中途离开的情况。

队列的实现

队列的实现分为队列的定义和操作,如前所述,队列是元素的有序集合,添加操作发生在其尾部,移除操作则发生在头部。队列的操作顺序是 先进先出(FIFO),它支持以下操作。

  • Queue() :创建一个空队列。它不需要参数,且会返回一个空队列。
  • enqueue( item ) :在队列的尾部添加一个元素。它需要一个元素作为参数,不返回任何值。
  • dequeue() :从队列的头部移除一个元素。它不需要参数,且会返回一个元素,并修改队 列的内容。
  • isEmpty() :检查队列是否为空。它不需要参数,且会返回一个布尔值。
  • size() : 返回队列中元素的数目。它不需要参数,且会返回一个整数。

创建一个新类来实现队列抽象数据类型是十分合理的。像之前一样,我们利用简洁强大的列 表来实现队列。 既然要创建队列,我们首先要确认队列的头尾,在这里我们假设队列的尾部在列表的位置 0 处。

首先我们对队列类进行定义,一个队列中最主要最核心的要素就是队列中的元素,而新生成一个队列时,这个队列中往往没有任何元素,因此我们对队列的初始化定义为:队列中的元素为空,即引用的列表为空列表。

代码如下:

class Queue:def __init__(self):self.items = []

当一个队列生成以后,最常见的计算队列长度的操作是必不可少的,因此只需要计算引入列表的长度即可。

代码如下:

def size(self):return len(self.items)

既然可以计算长度,那么我们也可以判断队列是否为空,通常我们只需判断引入的列表是否为空列表即可判断队列是否为空了。

代码如下:

def isEmpty(self):return self.items == []

接下来就是我们似曾相识,但是又用途非常广泛的两种操作了,插入和删除,我们在前面讲解栈的时候进行了出栈和入栈的操作,而在队列中也有类似的操作,即入队和出队,而队列和栈最大的不同便是,入队和出队并不是在同一个地方执行的。添加操作发生在“尾部”,移除操作则发生在“头部”。

我们在此设引入的列表的 0 号位为队列的尾部,传入要插入的元素 item ,默认将其插入到列表首位,即队列的入队操作,代码如下:

def enqueue(self, item):self.items.insert(0,item)

我们在此设引入的列表的表尾为队列的头部,要进行出队操作,只需删除列表的最后一个元素即可。代码如下:

def dequeue(self):return self.items.pop()

整体的代码如下:

class Queue:def __init__(self):self.items = []def isEmpty(self):return self.items == []def size(self):return len(self.items)def enqueue(self, item):self.items.insert(0,item)def dequeue(self):return self.items.pop()

总结

恭喜你又学完了一个知识点,队列和栈的知识是不是很简单呢?只需要掌握列表的一些要点,就可以轻松的将队列和栈实现,我们在基础篇只讲解了最基础的实现方法,在后续的提高篇里会告诉大家在考试或者就业面试中,站和队列要怎么运用。

流沙团队联合AI悦创|久远·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。QQ、微信在线,随时响应!


【久远讲算法】队列——先进先出的数据结构相关推荐

  1. 【久远讲算法】 什么是空间复杂度

    [久远讲算法] 什么是空间复杂度 你好,我是久远,这周我们继续聊算法,接着上次的时间复杂度,我们进行关于空间复杂度的讲解. 知识回顾 首先,我们来对上周的任务进行大概的复习. 算法是什么? 从理论层面 ...

  2. 数据结构-队列-“先进先出”的数据结构

    1.队列是线性表的一种,在操作数据元素时,和栈一样,有自己的规则:使用队列存取数据元素时,数据元素只能从表的一端进入队列,另一端出队列 2.队列的顺序表示和实现 使用顺序存储结构表示队列时,首先申请足 ...

  3. 数据结构算法-队列技术点

    基本描述 排队,做核酸这些大家都有吧, 学校打饭是不是按照队伍的形式来 打饭? 队列原理精讲 队列:是一个先进先出 的一种数据结构, 队列:受限线性结构; 队列::只允许前面出队后面入队 出队的时候有 ...

  4. 数据结构与算法---队列

    数据结构与算法-队列 1. 队列的定义: 队列(Queue )简称队,是一种操作受限制 的线性表 ,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队: 删除元素称为出队 ...

  5. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  6. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  7. js实现栈、队列、链表数据结构

    面试遇到的问题,当时有点懵 脑袋一片空白,面试完了想了下,我可能是傻了,明明在问这个问题之前面试官问了我字符串都有哪些操作方法!!!我是真鱼吧! 今天看了下<学习JavaScript数据结构与算 ...

  8. 再也不担心问到Java集合了,一文讲透Java中的数据结构

    Java数据结构实现详解 摘要 1 集合框架 1.1 顶层接口Iterable 1.2 Collection接口 2 List 2.1 List接口 2.2 List实现ArrayList 2.2.1 ...

  9. 队列 一种数据结构(多线程利器)

    # 队列 一种数据结构(多线程利器) import queue # 导入对列模块 q = queue.Queue() # 创建一个对列对象,先进先出 # q = queue.Queue(3) # 创建 ...

最新文章

  1. 美团mysql 闪回_MyFlash——美团点评的开源MySQL闪回工具
  2. PostGIS mysql_fdw安装(Linux)
  3. nginx + tomcat + redis 部署项目,解决session共享问题。
  4. python小脚本获取抖音直播源的demo
  5. PDMS Pipeline Tool 教程(三):材料表
  6. 从淘宝,天猫,1688,微店,京东,苏宁,淘特等其他平台一键复制商品到拼多多平台(批量上传宝贝详情接口教程)
  7. 【托业】【新托业TOEIC新题型真题】学习笔记3-题库二-P5-6
  8. 安装和配置fedora19要做的那些事,超值经验
  9. html鼠标经过晃动代码,css3让div随鼠标移动而抖动起来
  10. uni-app 微信小程序全局配置分享好友、朋友圈...
  11. java 建立临时文件夹
  12. 企业微信---第三方应用开发 笔记
  13. c语言中文字模描点算法,点阵字模工具编程是怎么编的?
  14. Three.js中添加指南针
  15. 华为智慧屏看鸿蒙,AI加持的另类彩电之华为智慧屏带你体验鸿蒙
  16. 决赛序曲|第三届全国人工智能大赛回忆录
  17. Ubuntu 安装迅雷替代软件XwareDesktop
  18. 【无标题】警惕利用个人收款码升级套路诈骗
  19. BlackBerry 开发笔记入门
  20. 《白鹿原》读后感(推荐大家细细阅读)

热门文章

  1. 华师大 OJ 2897
  2. android监控摄像头,监控其实很简单 给摄像头装个安卓系统
  3. 纵断面图标注栏数据复制
  4. Ubuntu18.04.4安装
  5. 程序员同事表演加班一个月后,我离职了
  6. 服务器配置tomcat
  7. cf修改游戏客户端是什么意思_穿越火线修改游戏名方法
  8. 特征工程——推荐系统里的特征工程
  9. 高德地图逆地理编码Geocoder的getlocation获取不到位置信息
  10. creator 微信小游戏存取数据