基于python实现链式队列代码
"""
链式存储-队列
linkqueue.py
代码实现
思路:
1.入队,
2.出队,
3.判断空满
""" # 异常类
class QueueError(Exception):
pass # 节点生成类
class Node:
"""
思路:将自定义的类视为节点的生成类,
实例对象中包含数据的部分和下一个节点的next
"""
def __init__(self,val,next = None):
self.val = val # 有用数据
self.next = next # 循环下一个节点的关系 # 链式存储队列类-队头删除,队尾加入,判断空满等
class LinkQueue01:
"""
头尾选择一端做队头,另一端队尾,队头删除,队尾插入,总有一端需要遍历
改进思路:标记头部和尾部,不需要遍历
"""
def __init__(self):
# 标记头部位置
self._first = Node(None) # 队头删除
def dequeue(self):
p = self._first
if p.next is None:
raise QueueError("queue is empty")
else:
p.next = p.next.next # 队尾插入
def enqueue(self, val):
p = self._first
if p.next is None:
p.next = Node(val)
else:
while p.next is not None:
p = p.next
p.next = Node(val) # 判断队列为空
def is_empty(self):
if self._first.next is None:
return True
else:
return False # 遍历队列
def show(self):
# 队列为空时,报异常
if self._first.next is None:
raise QueueError("queue is empty")
else:
p = self._first.next # 第一个有限节点
while p is not None:
print(p.val)
p = p.next # p 向后移动 # print("-"*30)
# if __name__ == "__main__":
# lq = LinkQueue()
# print(lq.is_empty())
# #lq.delete_node()
# # lq.show()
# lq.enqueue(1)
# lq.show()
# print("***")
# # lq.insert_end(2)
# #print(lq.is_empty())
# lq.enqueue(2)
# lq.enqueue(3)
# lq.show()
# print("***")
# lq.enqueue(4)
# lq.show()
# #print(lq.is_empty())
# #lq.dequeue()
# #lq.show()
#-------------------------------------------------
"""
链式队列的另一种实现
重点代码
思路分析:
1.基于链表构建队列模型
2.链表的开端作为队头,结尾位置作为队尾
3.单独定义队尾进行标记,每次插入数据不需要遍历
4.当队头和队尾重叠时,认为队列为空
""" class LinkQueue:
def __init__(self):
# 定义队头队尾属性变量,牺牲节点,
self.front = self.rear = Node(None) # 判断队列空
def is_empty(self):
return self.front == self.rear # 入队操作,rear动
def enqueue(self,val):
self.rear.next = Node(val)
self.rear = self.rear.next # 出队,front动,指向谁,谁出队
def dequeue(self):
if self.front == self.rear:
raise QueueError("queue is empty")
self.front = self.front.next
return self.front.val # 指向他,但实际出队 if __name__ == "__main__":
print("-"*30)
lq = LinkQueue()
lq.enqueue(1)
lq.enqueue(2)
lq.enqueue(3)
lq.enqueue(4)
print(lq.dequeue()) # 1
基于python实现链式队列代码的更多相关文章
- 基于python实现顺序存储的队列代码
""" 队列-顺序存储 seqqueue.py 代码实现 """ # 自定义异常类 class QueueError(Exception): ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 循环队列和链式队列(C++实现)
循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...
- 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构
题目: 7-1 银行业务队列简单模拟 (30 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...
- 队列(链式队列)----C语言
链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...
- 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 顺序队列与链式队列--C语言实现
关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- C语言实现链式队列
链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...
随机推荐
- why哥被阿里一道基础面试题给干懵了,一气之下写出万字长文。
这是why的第 65 篇原创文章 荒腔走板 大家好,我是 why,欢迎来到我连续周更优质原创文章的第 65 篇.老规矩,先荒腔走板聊聊技术之外的东西. 上面这图是去年的成都马拉松赛道上,摄影师抓拍的我 ...
- List和Dictionary的使用技巧总结
List和Dictionary想必是我们平常用到最多的C#容器了,他们使用起来都很简单,所以很多人就可能就没去深究,其实在使用过程中有很多的小技巧能让我们写的代码变得更高效也更安全. 1·合理的指定初 ...
- Linux下find与exec的联手干大事
在Linux下工作,find命令绝对是一个非常高频的命令.我们可以用find命令来找到符合某些关键词的文件,找到某些日期的文件,也可以设定一些正则表达式,找到一系列满足该条件的文件. 但是,如果只有一 ...
- JavaScript 伪Ajax请求
伪Ajax 通过iframe以及form表单,可以实现伪Ajax的方式. 并且它的兼容性是最好的. iframe iframe标签能够获取一个其他页面的文档内容,这说明它内部肯定是发送了一个请求,并且 ...
- [程序员代码面试指南]数组和矩阵-数组的partition调整
题目 补充问题:数组只含0,1,2,对数组排序,要求时间复杂度O(n),额外空间复杂度O(1) 题解 维护三个变量,l,idx,r.左区间[0,l],中间区间[l+1,idx],右区间[idx+1,r ...
- python中的画笔控制函数
蟒蛇绘制代码中的画笔控制函数 penup() ,pendown() ,pensize() , pencolor()函数 这里就将海龟想象成画笔 画笔控制函数,画笔操作后一直有效,一般成对出现 将画笔抬 ...
- 快速了解前端开发HTML的正确姿势
摘要:web前端开发(也称为客户端开发)主要是通过html,CSS和JavaScript等前端技术,实现网站在客服端的正确显示及交互功能. 一.web标准介绍 web标准: w3c:万维网联盟组织,用 ...
- Shiro性能优化:解决Session频繁读写问题
目录 背景 应对思路 本地缓存 Session 避免不必要的 Session 更新 代码实现 ShiroSessionDAO.java ShiroConfig.java 背景 Shiro 提供了强大的 ...
- 前端性能测试工具之PageSpeed Insights
谷歌开发的一个免费的网页分析工具,在地址栏中输入被分析的网站 url 地址,点击分析 地址:https://developers.google.cn/speed/pagespeed/insights/ ...
- JavaScript的this到底代表谁?(this指向哪里?)
在很多编程语言中都有this这个特殊关键字的存在,比如Java中的this,还有本文要说到的JavaScript中的this.那么,JavaScript中this究竟有什么特性和用法呢?它又是如何定义 ...