python栈与队列的封装
项目案例一:栈的封装
- 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。向一个栈内插入元素称为是进栈,push;从一个栈删除元素称为是出栈,pop。
- 特点 :后进先出(LIFO)。
代码:
class Stack(object):"""栈的封装[1,2,3,4]"""def __init__(self):self.stack = []def push(self,value):"""入栈"""self.stack.append(value)print(f"入栈元素是{value}")def pop(self):"""出栈"""if self.is_empty():raise Exception('栈为空')item = self.stack.pop()print(f"出栈元素是{item}")return itemdef is_empty(self):"""判断栈是否为空"""return len(self.stack) == 0def top(self):"""返回栈顶元素"""if self.is_empty():raise Exception('栈为空')return self.stack[-1]def __len__(self):"""魔术方法,len(object)自动执行的方法"""return len(self.stack)if __name__ == '__main__':stack = Stack()stack.push(1)stack.push(2)stack.push(3)print(len(stack))stack.pop()print(stack.is_empty())print(stack.top())
代码运行结果:
项目案例: 队列的封装
- 队列是限制在一端进行插入操作和另一端删除操作的线性表,允许进行插入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”
,当队列中没有元素时称为“空队”。 - 特点 :先进先出(FIFO)。
class Queue(object):"""队列的封装[1,2,3,4]1.列表的左侧为队尾2.列表的右侧为队头"""def __init__(self):self.queue = []def enqueue(self,value):"""入队"""self.queue.insert(0,value)print(f"入队元素是{value}")def dequeue(self):"""出队"""if self.is_empty():raise Exception('队列为空')item = self.queue.pop()print("出队元素为{item}")return itemdef __len__(self):"""获取队列的长度"""return len(self.queue)def first(self):"""返回队头元素"""if self.is_empty():raise Exception('队列为空')return self.queue[-1]def is_empty(self):"""判断栈是否为空"""return len(self.queue) == 0def last(self):"""获取队尾元素"""if self.is_empty():raise Exception('队列为空')return self.queue[0]if __name__ == '__main__':queue = Queue()queue.enqueue(1)queue.enqueue(2)queue.enqueue(3)print(queue.is_empty())queue.dequeue()print(queue.first())print(queue.last())
代码运行结果:
项目案例:二叉树的封装
参考博客: 二叉树封装
二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。
"""
二叉树:
"""class Node(object):"""节点类"""def __init__(self, val=None, left=None, right=None):self.val = valself.left = leftself.right = rightclass BinaryTree(object):"""封装二叉树"""def __init__(self, root):self.root = rootdef pre_travel(self, root):"""先序遍历: 根左右"""if (root != None):print(root.val)self.pre_travel(root.left)self.pre_travel(root.right)def in_travel(self, root):"""中序遍历: 左根右"""if (root != None):self.in_travel(root.left)print(root.val)self.in_travel(root.right)def last_travel(self, root):"""后序遍历: 左右根"""if (root != None):self.last_travel(root.left)self.last_travel(root.right)print(root.val)
if __name__ == '__main__':node1 = Node(1)node2 = Node(2)node3 = Node(3)node4 = Node(4)node5 = Node(5)node6 = Node(6)node7 = Node(7)node8 = Node(8)node9 = Node(9)node10 = Node(10)bt = BinaryTree(root=node1)node1.left = node2node1.right = node3node2.left = node4node2.right= node5node3.left = node6node3.right = node7node4.left = node8node4.right = node9node5.left = node10# 先序遍历bt.pre_travel(node1)
遍历结果:
python栈与队列的封装相关推荐
- python 栈和队列_Python实现栈和队列的简单操作方法示例
本文实例讲述了Python实现栈和队列的简单操作方法.分享给大家供大家参考,具体如下: 先简单的了解一下数据结构里面的栈和堆: 栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: sta ...
- python 栈和队列_python 栈和队列的基本实现
python中的列表结构可以用来实现栈和队列. [栈]: 栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底 栈的 ...
- python栈和队列
入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删. 目录 一.栈和队列的概念 1.栈 2.队列 二.python中的LifoQueue(其实也是所 ...
- python 栈和队列 排序 初级数据结构
编写一个类,具有栈和队列的功能.实现以下4个方法: shit() 返回并删除列表中第一个元素 unshit() 在列表的头部'压入'一个新的元素 push() 在列表尾部增加一个 ...
- Python栈与队列
栈: 栈**(也称******下压栈******.堆栈)是******仅允许在表尾****进行插入和删除操作的线性表. 我们把允许插入和删除的一端称为****栈顶******,另一端称为******栈 ...
- 让python飞:形象理解python 栈、队列、lambda、生成器、迭代器、模块
Day10 棒球和球棒与水晶火炉和五彩宝箱 棒球和球棒来到了足球场,要打棒球!但是球场工作人员不同意.棒球和球棒表示不服.球场工作人员说,这样吧,你按我们的规则完成任务,我们就让你们在这里玩.这里有两 ...
- python - 栈与队列(只有代码)
1. 栈: - 后进先出 class Stack(object):def __init__(self):self.stack = []def peek(self):return self.stack[ ...
- python 栈和队列_python实现栈和队列
栈(Stack),也叫做堆栈, 是一种容器, 可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop ...
- python 栈和队列的区别_Python 栈与队列
一.栈: #栈的实现,先进后出 class Stack(object): def __init__(self): self.__list = [] def push(self,item): self. ...
最新文章
- CVPR 2020目标跟踪多篇开源论文(上)
- NeurIPS 2020 Oral 论文讲解
- linux 查看某一个进程的socket连接数
- loadrunner脚本编写,对nginx进行压测
- 如何去掉手机php,dedecms怎么关闭手机版
- 【全记录】2017云栖大会·北京峰会——企业云上业务优化专场
- 阿里达摩院发布2019年十大科技趋势
- Spark structured 记录一次kudu扩容导致无法写入数据的问题
- CSS工具之CSS重置(CSS Reset)
- leetcode 617. 合并二叉树(Merge Two Binary Trees)
- PhotoShop插件的开发
- 【Navicat】Navicat:Navicat 导出数据库表为 EXCEL 格式、设计优化数据字典 EXCEL 模板
- 微信安装包11年膨胀575倍,UP主:“98%的文件是垃圾”;苹果应用商店被曝大量色情App;四大科技巨头呼吁废除闰秒|极客头条
- 最新小说免费API--书香楼,每日不断更新
- ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
- 算法与数据结构 - 数组详解
- 小游戏之斗兽棋(uniapp)
- vue导出excel文件损坏
- 查找Windows和MacBook序列号
- linux chown sh,chown命令示例
热门文章
- python的图表库_python 图表库
- 2000字精华总结,安利一个超好用的Pandas数据挖掘分析神器
- 前端还是后端?这些公号教你一锅端!
- mysql 5.1.73路径_centos7.2 环境下 mysql-5.1.73 安装配置
- mysql主从克隆服务器_mysql主从复制服务器配置
- 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...
- xampp打开mysql的admin访问被拒绝_U盘插入电脑提示无法访问?别怕,我找到解决办法了...
- ni软件可以卸载吗_黑科技 | 2020全新AI人工智能修图汉化版软件!这下可以放心卸载PS啦!...
- nginx配置thinkphp5
- 之前写的h5css3动画——月食