1. """
  2. 链式存储-队列
  3. linkqueue.py
  4. 代码实现
  5. 思路:
  6. 1.入队,
  7. 2.出队,
  8. 3.判断空满
  9. """
  10.  
  11. # 异常类
  12. class QueueError(Exception):
  13. pass
  14.  
  15. # 节点生成类
  16. class Node:
  17. """
  18. 思路:将自定义的类视为节点的生成类,
  19. 实例对象中包含数据的部分和下一个节点的next
  20. """
  21. def __init__(self,val,next = None):
  22. self.val = val # 有用数据
  23. self.next = next # 循环下一个节点的关系
  24.  
  25. # 链式存储队列类-队头删除,队尾加入,判断空满等
  26. class LinkQueue01:
  27. """
  28. 头尾选择一端做队头,另一端队尾,队头删除,队尾插入,总有一端需要遍历
  29. 改进思路:标记头部和尾部,不需要遍历
  30. """
  31. def __init__(self):
  32. # 标记头部位置
  33. self._first = Node(None)
  34.  
  35. # 队头删除
  36. def dequeue(self):
  37. p = self._first
  38. if p.next is None:
  39. raise QueueError("queue is empty")
  40. else:
  41. p.next = p.next.next
  42.  
  43. # 队尾插入
  44. def enqueue(self, val):
  45. p = self._first
  46. if p.next is None:
  47. p.next = Node(val)
  48. else:
  49. while p.next is not None:
  50. p = p.next
  51. p.next = Node(val)
  52.  
  53. # 判断队列为空
  54. def is_empty(self):
  55. if self._first.next is None:
  56. return True
  57. else:
  58. return False
  59.  
  60. # 遍历队列
  61. def show(self):
  62. # 队列为空时,报异常
  63. if self._first.next is None:
  64. raise QueueError("queue is empty")
  65. else:
  66. p = self._first.next # 第一个有限节点
  67. while p is not None:
  68. print(p.val)
  69. p = p.next # p 向后移动
  70.  
  71. # print("-"*30)
  72. # if __name__ == "__main__":
  73. # lq = LinkQueue()
  74. # print(lq.is_empty())
  75. # #lq.delete_node()
  76. # # lq.show()
  77. # lq.enqueue(1)
  78. # lq.show()
  79. # print("***")
  80. # # lq.insert_end(2)
  81. # #print(lq.is_empty())
  82. # lq.enqueue(2)
  83. # lq.enqueue(3)
  84. # lq.show()
  85. # print("***")
  86. # lq.enqueue(4)
  87. # lq.show()
  88. # #print(lq.is_empty())
  89. # #lq.dequeue()
  90. # #lq.show()
  91. #-------------------------------------------------
  92. """
  93. 链式队列的另一种实现
  94. 重点代码
  95. 思路分析:
  96. 1.基于链表构建队列模型
  97. 2.链表的开端作为队头,结尾位置作为队尾
  98. 3.单独定义队尾进行标记,每次插入数据不需要遍历
  99. 4.当队头和队尾重叠时,认为队列为空
  100. """
  101.  
  102. class LinkQueue:
  103. def __init__(self):
  104. # 定义队头队尾属性变量,牺牲节点,
  105. self.front = self.rear = Node(None)
  106.  
  107. # 判断队列空
  108. def is_empty(self):
  109. return self.front == self.rear
  110.  
  111. # 入队操作,rear动
  112. def enqueue(self,val):
  113. self.rear.next = Node(val)
  114. self.rear = self.rear.next
  115.  
  116. # 出队,front动,指向谁,谁出队
  117. def dequeue(self):
  118. if self.front == self.rear:
  119. raise QueueError("queue is empty")
  120. self.front = self.front.next
  121. return self.front.val # 指向他,但实际出队
  122.  
  123. if __name__ == "__main__":
  124. print("-"*30)
  125. lq = LinkQueue()
  126. lq.enqueue(1)
  127. lq.enqueue(2)
  128. lq.enqueue(3)
  129. lq.enqueue(4)
  130. print(lq.dequeue()) # 1

基于python实现链式队列代码的更多相关文章

  1. 基于python实现顺序存储的队列代码

    """ 队列-顺序存储 seqqueue.py 代码实现 """ # 自定义异常类 class QueueError(Exception): ...

  2. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  3. 循环队列和链式队列(C++实现)

    循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...

  4. 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构

    题目: 7-1 银行业务队列简单模拟 (30 分)   设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...

  5. 队列(链式队列)----C语言

    链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...

  6. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  7. 顺序队列与链式队列--C语言实现

    关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...

  8. 数据结构-链式队列-C++

    用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...

  9. C语言实现链式队列

    链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...

随机推荐

  1. JAVA 去除实体中类型为string的属性值中的空格

    前端传入的参数实体中,有时候会出现传入了一空格,导致操作失败,这时就可以利用java反射机制去除实体中类型为sting的属性值中的空格. java代码示例: package com.spyang.ut ...

  2. 让document.write的广告无阻塞的加载

    广告代码分析 很多第三方的广告系统都是使用document.write来加载广告,如下面的一个javascript的广告链接. 1 <script type="text/javascr ...

  3. HTML-CSS-JS Prettify 代码格式化插件

    前提:已经安装 node.js.安装插件 HTML-CSS-JS Prettify,修改node路径,即可通过单击右键 HTML-CSS-JS Prettify 中的 Prettify Code 使用 ...

  4. python基础一(安装、变量、循环、git)

    一.开发语言分类 系统的开发语言有java.c++.c#.python.ruby.php等等,开发语言可分为编译型语言和解释型语言. 编译型语言就是写好代码之后就把代码编译成二进制文件,运行的时候运行 ...

  5. CSS的坑

    如何触发 bfc 规则 浮动元素:float 除 none 以外的值 绝对定位元素:position (absolute.fixed) display 为 inline-block.table-cel ...

  6. 从头看看Tomcat启动Spring容器的原理

    通过带注解Spring Boot可以启动一个web容器,并初始化bean容器.那么Tomcat启动并初始化spring容器的原理是怎样的? Tomcat启动web程序时会创建一对父子容器(图1): 有 ...

  7. Java链接db2套接字出错

    ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could ...

  8. 第2课 - 搭建Lua开发环境

    第2课 - 搭建Lua开发环境 1. Lua 的优点 (1)Lua 使用标准的 ANSI C 进行开发,可以无缝集成到宿主程序,且几乎支持所有平台. (2)Lua 是开源且免费的软件,以源码的方式直接 ...

  9. hystrix(6) 命令执行

    上一节中讲到了HystrixCommand有四种执行方法,这一节就来讲一下这四种方法直接的关系以及他们的实现. execute方法使用同步方式获取结果,本质是调用了queue方法获取了一个Future ...

  10. 部署Go语言程序的N种方式

    部署Go语言项目 本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法. 独立部署 Go 语言支持跨平台交叉编译,也就是说我们可以在 Windows 或 ...