项目案例一:栈的封装

  • 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。向一个栈内插入元素称为是进栈,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栈与队列的封装相关推荐

  1. python 栈和队列_Python实现栈和队列的简单操作方法示例

    本文实例讲述了Python实现栈和队列的简单操作方法.分享给大家供大家参考,具体如下: 先简单的了解一下数据结构里面的栈和堆: 栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: sta ...

  2. python 栈和队列_python 栈和队列的基本实现

    python中的列表结构可以用来实现栈和队列. [栈]: 栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底 栈的 ...

  3. python栈和队列

    入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删. 目录 一.栈和队列的概念 1.栈 2.队列 二.python中的LifoQueue(其实也是所 ...

  4. python 栈和队列 排序 初级数据结构

    编写一个类,具有栈和队列的功能.实现以下4个方法: shit()       返回并删除列表中第一个元素 unshit()   在列表的头部'压入'一个新的元素 push()    在列表尾部增加一个 ...

  5. Python栈与队列

    栈: 栈**(也称******下压栈******.堆栈)是******仅允许在表尾****进行插入和删除操作的线性表. 我们把允许插入和删除的一端称为****栈顶******,另一端称为******栈 ...

  6. 让python飞:形象理解python 栈、队列、lambda、生成器、迭代器、模块

    Day10 棒球和球棒与水晶火炉和五彩宝箱 棒球和球棒来到了足球场,要打棒球!但是球场工作人员不同意.棒球和球棒表示不服.球场工作人员说,这样吧,你按我们的规则完成任务,我们就让你们在这里玩.这里有两 ...

  7. python - 栈与队列(只有代码)

    1. 栈: - 后进先出 class Stack(object):def __init__(self):self.stack = []def peek(self):return self.stack[ ...

  8. python 栈和队列_python实现栈和队列

    栈(Stack),也叫做堆栈, 是一种容器, 可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop ...

  9. python 栈和队列的区别_Python 栈与队列

    一.栈: #栈的实现,先进后出 class Stack(object): def __init__(self): self.__list = [] def push(self,item): self. ...

最新文章

  1. CVPR 2020目标跟踪多篇开源论文(上)
  2. NeurIPS 2020 Oral 论文讲解
  3. linux 查看某一个进程的socket连接数
  4. loadrunner脚本编写,对nginx进行压测
  5. 如何去掉手机php,dedecms怎么关闭手机版
  6. 【全记录】2017云栖大会·北京峰会——企业云上业务优化专场
  7. 阿里达摩院发布2019年十大科技趋势
  8. Spark structured 记录一次kudu扩容导致无法写入数据的问题
  9. CSS工具之CSS重置(CSS Reset)
  10. leetcode 617. 合并二叉树(Merge Two Binary Trees)
  11. PhotoShop插件的开发
  12. 【Navicat】Navicat:Navicat 导出数据库表为 EXCEL 格式、设计优化数据字典 EXCEL 模板
  13. 微信安装包11年膨胀575倍,UP主:“98%的文件是垃圾”;苹果应用商店被曝大量色情App;四大科技巨头呼吁废除闰秒|极客头条
  14. 最新小说免费API--书香楼,每日不断更新
  15. ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
  16. 算法与数据结构 - 数组详解
  17. 小游戏之斗兽棋(uniapp)
  18. vue导出excel文件损坏
  19. 查找Windows和MacBook序列号
  20. linux chown sh,chown命令示例

热门文章

  1. python的图表库_python 图表库
  2. 2000字精华总结,安利一个超好用的Pandas数据挖掘分析神器
  3. 前端还是后端?这些公号教你一锅端!
  4. mysql 5.1.73路径_centos7.2 环境下 mysql-5.1.73 安装配置
  5. mysql主从克隆服务器_mysql主从复制服务器配置
  6. 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...
  7. xampp打开mysql的admin访问被拒绝_U盘插入电脑提示无法访问?别怕,我找到解决办法了...
  8. ni软件可以卸载吗_黑科技 | 2020全新AI人工智能修图汉化版软件!这下可以放心卸载PS啦!...
  9. nginx配置thinkphp5
  10. 之前写的h5css3动画——月食