• 队列概览
      • 队列是线性的集合
      • 队列的插入限制在队尾,删除限制在队头。支持先进先出协议( 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章:队列的更多相关文章

  1. 数据结构( Pyhon 语言描述 ) — —第10章:树

    树的概览 树是层级式的集合 树中最顶端的节点叫做根 个或多个后继(子节点). 没有子节点的节点叫做叶子节点 拥有子节点的节点叫做内部节点 ,其子节点位于层级1,依次类推.一个空树的层级为 -1 树的术 ...

  2. 数据结构( Pyhon 语言描述 ) — — 第5章:接口、实现和多态

    接口 接口是软件资源用户可用的一组操作 接口中的内容是函数头和方法头,以及它们的文档 设计良好的软件系统会将接口与其实现分隔开来 多态 多态是在两个或多个类的实现中使用相同的运算符号.函数名或方法.多 ...

  3. 数据结构( Pyhon 语言描述 ) — —第9章:列表

    概念 列表是一个线性的集合,允许用户在任意位置插入.删除.访问和替换元素 使用列表 基于索引的操作 基本操作 数组与列表的区别 数组是一种具体的数据结构,拥有基于单个的物理内存块的一种特定的,不变的实 ...

  4. 数据结构( Pyhon 语言描述 ) — — 第7章:栈

    栈概览 栈是线性集合,遵从后进先出原则( Last - in first - out , LIFO )原则 栈常用的操作包括压入( push ) 和弹出( pop ) 栈的应用 将中缀表达式转换为后缀 ...

  5. 数据结构( Pyhon 语言描述 ) — — 第2章:集合概览

    集合类型 定义 个或多个其他对象的对象.集合拥有访问对象.插入对象.删除对象.确定集合大小以及遍历或访问集合的对象的操作 分类 根据组织方式进行 线性集合 线性集合按照位置排列其项,除了第一项,每一项 ...

  6. 数据结构( Pyhon 语言描述 ) — — 第4章:数据和链表结构

    数据结构是表示一个集合中包含的数据的一个对象 数组数据结构 数组是一个数据结构 支持按照位置对某一项的随机访问,且这种访问的时间是常数 在创建数组时,给定了用于存储数据的位置的一个数目,并且数组的长度 ...

  7. 数据结构( Pyhon 语言描述 ) — —第11章:集和字典

    使用集 集是没有特定顺序的项的一个集合,集中的项中唯一的 集上可以执行的操作 返回集中项的数目 测试集是否为空 向集中添加一项 从集中删除一项 测试给定的项是否在集中 获取两个集的并集 获取两个集的交 ...

  8. 数据结构( Pyhon 语言描述 ) — — 第1章:Python编程基础

    变量和赋值语句 在同一条赋值语句中可以引入多个变量 交换变量a 和b 的值 a,b = b,a Python换行可以使用转义字符\,下一行的缩进量相同 )\ 帮助文档 help() 控制语句 条件式语 ...

  9. 数据结构( Pyhon 语言描述 ) — — 第6章:继承和抽象类

    继承 新的类通过继承可以获得已有类的所有特性和行为 继承允许两个类(子类和超类)之间共享数据和方法 可以复用已有的代码,从而消除冗余性 使得软件系统的维护和验证变得简单 子类通过修改自己的方法或者添加 ...

随机推荐

  1. [題解]BZOJ_1260_塗色

    簡單的區間dp,結果竟然寫掛了......還掛的很徹底......狗屎 如果區間左右端點相等,那麼不需要在多花一次去刷,對 f [ i+1 ] [ j ],f [ i ] [ j-1 ]取個min, ...

  2. Qt 2D绘图之二:抗锯齿渲染和坐标系统

    一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...

  3. java emoji表情存储解决方案

    1.问题产生情况 我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_general_ci,就是utf-8编码,结果也就报错误了. 2. ...

  4. 一步步实现自己的ORM(五)

    上一张优化了ORM的INSERT.UPDATE.DELETE,但将数据库里的值填充到实体类这块还没优化.另外有博友在网上咨询说你这个都是查询所有字段的,而他的需求是按需查询字段,不是一次性取出来所有字 ...

  5. 解决win64无法添加curl扩展的问题

    网上试了很多方法都无效,最后直接用phpstudy集成安装包中对应版本的php_curl.dll替换即可

  6. js图片预加载以及延迟加载

    当我们需要做图片轮播的时候,如果让图片提前下载到本地,用浏览器缓存起来,我们可以用Image对象: function preLoadImg(){ var img=new Image(); img.sr ...

  7. Android 坑爹问题

    A/art: art/runtime/jdwp/jdwp_event.cc:] Check failed: Thread::Current() != GetDebugThread() (Thread: ...

  8. 在SAP CRM WebClient UI中用javascript触发ABAP event

    环境:SAP CRM WebClient UI 需求:在WebClient UI里不通过用户手动点击,而是使用JavaScript代码自动触发ABAP后台的代码. 解决方案: 1. 定义一个hidde ...

  9. Python学习日志9月13日

    昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比 ...

  10. UVA 1412 Fund Management (预处理+状压dp)

    状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态.但是这样做用数组开不下,用map离散会T. 而实际上很多九进制数很多都是用不上的.因此类似uva 1601 Mornin ...