数据结构( Pyhon 语言描述 ) — — 第8章:队列
- 队列概览
- 队列是线性的集合
- 队列的插入限制在队尾,删除限制在队头。支持先进先出协议( FIFIO, first-in first-out )
- 两个基本操作
- add:在队尾添加一项
- pop:从队头弹出一项
- 优先集合
- 在优先队列中,具有较高优先级的项,会在那些具有较低优先级的项之前弹出。具有相同优先级的项,则仍然按照 FIFO 的顺序弹出
- 计算机科学中的大多数队列,涉及对共享资源的访问
- CPU访问
- 磁盘访问
- 打印机访问
- 队列接口及其应用
- 队列接口中的方法

- peek 和 pop 方法需要验证队列非空的先验条件,或者会引发异常
- 队列的两个应用
- 模拟
- 确定每天不同时间段,在岗工作的收很员的数目
- 轮询CPU调试
- 示意图

- 可以使用优先队列来优先处理某些事件
- 队列的实现
- 队列的链表实现
- 为了实现对队列两端的快速访问,需要指向两端的外部指针

- add 操作
- 在队尾添加一项,需要修改 rear 指针

- 代码
def add(self, newItem):
"""Add new Item to the rear of the queue."""
newNode = Node(newItem, None)
if self.isEmpty():
self._front = newNode
else:
self._rear.next = newNode
self._rear = newNode
- pop操作,与链表栈的操作基本相同
def pop(self):
"""Remove and return the item at the foront of the queue.
Precondition: the queue is not empty."""
#Check precondition here
oldItem = self._front.data
self._front = self._front.next
if self._front is None:
self._rear = None
return oldItem
- 整体代码
- 队列的数组实现
- 使用 front 和 rear 两个索引来指示队列的开始和结束位置

- 调整数组大小时,最好让数组占据最初的数组段
- 两种实现的时间和空间复杂度分析
- __str__,__add__ 和 __eq__方法的运行时间是 O(n),其他方法的最大运行时间为O(1)。但是数组实现,在需要调整数组大小时,其运行时间为O(n)
- 当数组实现的填充因子大于 1/2 时,其空间利用率要比链表实现高
- 整体代码
- 优先队列
- 较小的整数是优先级较高的项
- 当一个对象本身是不可比较时,可以使用另一个可比较对象的优先级来包装它
- Comparable 类代码
- 优先队列类
- 只需要修改队列类的 add 方法即可
- LinkedPriorityQueue 类代码
- 案例:模拟超市排队结账
- 输入与输出
- 类及其作用

- 系统整体设计图

- 案例:急诊室病人调度
- 相关命令

- 相关的类

数据结构( Pyhon 语言描述 ) — — 第8章:队列的更多相关文章
- 数据结构( Pyhon 语言描述 ) — —第10章:树
树的概览 树是层级式的集合 树中最顶端的节点叫做根 个或多个后继(子节点). 没有子节点的节点叫做叶子节点 拥有子节点的节点叫做内部节点 ,其子节点位于层级1,依次类推.一个空树的层级为 -1 树的术 ...
- 数据结构( Pyhon 语言描述 ) — — 第5章:接口、实现和多态
接口 接口是软件资源用户可用的一组操作 接口中的内容是函数头和方法头,以及它们的文档 设计良好的软件系统会将接口与其实现分隔开来 多态 多态是在两个或多个类的实现中使用相同的运算符号.函数名或方法.多 ...
- 数据结构( Pyhon 语言描述 ) — —第9章:列表
概念 列表是一个线性的集合,允许用户在任意位置插入.删除.访问和替换元素 使用列表 基于索引的操作 基本操作 数组与列表的区别 数组是一种具体的数据结构,拥有基于单个的物理内存块的一种特定的,不变的实 ...
- 数据结构( Pyhon 语言描述 ) — — 第7章:栈
栈概览 栈是线性集合,遵从后进先出原则( Last - in first - out , LIFO )原则 栈常用的操作包括压入( push ) 和弹出( pop ) 栈的应用 将中缀表达式转换为后缀 ...
- 数据结构( Pyhon 语言描述 ) — — 第2章:集合概览
集合类型 定义 个或多个其他对象的对象.集合拥有访问对象.插入对象.删除对象.确定集合大小以及遍历或访问集合的对象的操作 分类 根据组织方式进行 线性集合 线性集合按照位置排列其项,除了第一项,每一项 ...
- 数据结构( Pyhon 语言描述 ) — — 第4章:数据和链表结构
数据结构是表示一个集合中包含的数据的一个对象 数组数据结构 数组是一个数据结构 支持按照位置对某一项的随机访问,且这种访问的时间是常数 在创建数组时,给定了用于存储数据的位置的一个数目,并且数组的长度 ...
- 数据结构( Pyhon 语言描述 ) — —第11章:集和字典
使用集 集是没有特定顺序的项的一个集合,集中的项中唯一的 集上可以执行的操作 返回集中项的数目 测试集是否为空 向集中添加一项 从集中删除一项 测试给定的项是否在集中 获取两个集的并集 获取两个集的交 ...
- 数据结构( Pyhon 语言描述 ) — — 第1章:Python编程基础
变量和赋值语句 在同一条赋值语句中可以引入多个变量 交换变量a 和b 的值 a,b = b,a Python换行可以使用转义字符\,下一行的缩进量相同 )\ 帮助文档 help() 控制语句 条件式语 ...
- 数据结构( Pyhon 语言描述 ) — — 第6章:继承和抽象类
继承 新的类通过继承可以获得已有类的所有特性和行为 继承允许两个类(子类和超类)之间共享数据和方法 可以复用已有的代码,从而消除冗余性 使得软件系统的维护和验证变得简单 子类通过修改自己的方法或者添加 ...
随机推荐
- [题解](树形dp/换根)小x游世界树
2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...
- Tinghua Data Mining 4
贝叶斯 决策树 知道三文鱼和金枪鱼颜色 让你去猜 B命中的概率不能直接减去四分之三 因为有可能同时命中 A B 命中不是互斥事件 即便体检报告是阳性,真正得癌症的概率也很小,只有0.21 绝大多数的阳 ...
- 119 Pascal's Triangle II 帕斯卡三角形 II Pascal's Triangle II
给定一个索引 k,返回帕斯卡三角形(杨辉三角)的第 k 行.例如,给定 k = 3,则返回 [1, 3, 3, 1].注:你可以优化你的算法到 O(k) 的空间复杂度吗?详见:https://leet ...
- selenium登录 京东滑动验证码
京东的滑动验证码在页面上是没有原图的,所有我是用ps把他们拼成一个的. from selenium import webdriver from selenium.webdriver import Ac ...
- Ubuntu安装LAMP
1.安装apache2 sudo apt-get install apache2 sudo apt-get install apache2 Apache安装成功后,/var/www/默认作为web的根 ...
- 说说SpringMVC、SpringBoot和SpringCloud三者之间的联系和区别
这个问题是我在参加一次面试晚会活动上被问到的一个问题,看标题显然很简单就能够回答出来,但是仔细一琢磨,平时蒙头苦干的我们可能缺少关注和积累,好像并不能用较专业的术语和逻辑很顺畅的表达出来,于是我简要的 ...
- 终端工具Xmanager使用技巧
1. 新建绘画使用终端连接服务器 2. 设置终端类型和编码 3. 设置终端外观,包括字体颜色等等 4. 设置默认上传路径和下载路径
- HDU4035 Maze(期望DP)
题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 有n个房间,由n-1条隧道连通起来,形成一棵树,从结点1出发,开始走,在每个结点i ...
- JavaScript中,关于class的调用
PS:class的调用,其实是可以叠加的,当然了这要求样式不同的情况下,如果样式相同,则后一个样式会覆盖前一个样式. 1.举例如下: <div id="test" class ...
- Notepad++设计Tab制表符为4个空格
Notepad++中,常常需要将一个Tab制表符转换成4个空格.这种情况大多发生在对空白检查严格的情况下,比如Python程序. 设置 → 首选项 → 制表符设置 → 勾选“ 转换为空格 ”.