数据结构( Pyhon 语言描述 ) — — 第8章:队列

    • 队列概览
      • 队列是线性的集合
      • 队列的插入限制在队尾,删除限制在队头。支持先进先出协议( FIFIO first-in first-out )
      • 两个基本操作
        • add:在队尾添加一项
        • pop:从队头弹出一项
      • 优先集合
        • 在优先队列中,具有较高优先级的项,会在那些具有较低优先级的项之前弹出。具有相同优先级的项,则仍然按照 FIFO 的顺序弹出
      • 计算机科学中的大多数队列,涉及对共享资源的访问
        • CPU访问
        • 磁盘访问
        • 打印机访问
    • 队列接口及其应用
      • 队列接口中的方法
        • clip_image001
        • peek pop 方法需要验证队列非空的先验条件,或者会引发异常
    • 队列的两个应用
      • 模拟
        • 确定每天不同时间段,在岗工作的收很员的数目
      • 轮询CPU调试
        • 示意图
          • clip_image002
        • 可以使用优先队列来优先处理某些事件
    • 队列的实现
      • 队列的链表实现
        • 为了实现对队列两端的快速访问,需要指向两端的外部指针
          • clip_image003
        • add 操作
          • 在队尾添加一项,需要修改 rear 指针
            • clip_image004
          • 代码
            •     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

                      self._size += 1

        • 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

                    self._size -= 1

                    return oldItem

        • 整体代码
      • 队列的数组实现
        • 使用 front rear 两个索引来指示队列的开始和结束位置
          • clip_image005
        • 调整数组大小时,最好让数组占据最初的数组段
      • 两种实现的时间和空间复杂度分析
        • __str____add__ __eq__方法的运行时间是 O(n),其他方法的最大运行时间为O(1)。但是数组实现,在需要调整数组大小时,其运行时间为O(n)
        • 当数组实现的填充因子大于 1/2 时,其空间利用率要比链表实现高
        • 整体代码
    • 优先队列
      • 较小的整数是优先级较高的项
      • 当一个对象本身是不可比较时,可以使用另一个可比较对象的优先级来包装它
      • Comparable 类代码
      • 优先队列类
        • 只需要修改队列类的 add 方法即可
        • LinkedPriorityQueue 类代码
    • 案例:模拟超市排队结账
      • 输入与输出
      • 类及其作用
        • clip_image006
      • 系统整体设计图
        • clip_image007
    • 案例:急诊室病人调度
      • 相关命令
        • clip_image008
      • 相关的类
        • clip_image009

转载于:https://www.cnblogs.com/lijunjie9502/p/9892566.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值