Python数据结构之栈、队列及二叉树定义与用法浅析


Posted in Python onDecember 27, 2018

本文实例讲述了Python数据结构之栈、队列及二叉树定义与用法。分享给大家供大家参考,具体如下:

目前只实现了三种,栈、队列和二叉树,哪天得空继续补吧~

1. 栈

#栈
class Stack:
  def __init__(self,size = 16):
    self.stack = []
    self.size = size
    self.top = -1
  def setSize(self, size):
    self.size = size
  def isEmpty(self):
    if self.top == -1:
      return True
    else:
      return False
  def isFull(self):
    if self.top +1 == self.size:
      return True
    else:
      return False
  def top(self):
    if self.isEmpty():
      raise Exception("StackIsEmpty")
    else:
      return self.stack[self.top]
  def push(self,obj):
    if self.isFull():
      raise Exception("StackOverFlow")
    else:
      self.stack.append(obj)
      self.top +=1
  def pop(self):
    if self.isEmpty():
      raise Exception("StackIsEmpty")
    else:
      self.top -= 1
      return self.stack.pop()
  def show(self):
    print(self.stack)
s = Stack(5)
s.push(1)
s.push(2)
s.push(3)
s.push(4)
s.push(5)
s.show()
s.pop()
s.show()
s.push(6)
s.show()

运行结果:

Python数据结构之栈、队列及二叉树定义与用法浅析

2. 队列

#队列
class Queue:
  def __init__(self,size = 16):
    self.queue = []
    self.size = size
    self.front = 0
    self.rear = 0
  def isEmpty(self):
    return self.rear == 0
  def isFull(self):
    if (self.front - self.rear +1) == self.size:
      return True
    else:
      return False
  def first(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.front]
  def last(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.rear]
  def add(self,obj):
    if self.isFull():
      raise Exception("QueueOverFlow")
    else:
      self.queue.append(obj)
      self.rear += 1
  def delete(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      self.rear -=1
      return self.queue.pop(0)
  def show(self):
    print(self.queue)
q = Queue(3)
q.add(1)
q.add(2)
q.show()
q.delete()
q.show()

运行结果:

Python数据结构之栈、队列及二叉树定义与用法浅析

3. 二叉树

#队列
class Queue:
  def __init__(self,size = 16):
    self.queue = []
    self.size = size
    self.front = 0
    self.rear = 0
  def isEmpty(self):
    return self.rear == 0
  def isFull(self):
    if (self.front - self.rear +1) == self.size:
      return True
    else:
      return False
  def first(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.front]
  def last(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.rear]
  def add(self,obj):
    if self.isFull():
      raise Exception("QueueOverFlow")
    else:
      self.queue.append(obj)
      self.rear += 1
  def delete(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      self.rear -=1
      return self.queue.pop(0)
  def show(self):
    print(self.queue)
#二叉树
class BinaryTreeNode:
  def __init__(self,data,left,right):
    self.left = left
    self.data = data
    self.right = right
class BinaryTree:
  def __init__(self):
    self.root = None
  def makeTree(self,data,left,right):
    self.root = BinaryTreeNode(data,left,right)
    #left.root = right.root = None
  def isEmpty(self):
    if self.root is None:
      return True
    else:
      return False
  def preOrder(self,r):
    if r.root is not None:
      print(r.root.data)
      if r.root.left is not None:
        self.preOrder(r.root.left)
      if r.root.right is not None:
        self.preOrder(r.root.right)
  def inOrder(self,r):
    if r.root is not None:
      if r.root.left is not None:
        self.inOrder(r.root.left)
      print(r.root.data)
      if r.root.right is not None:
        self.inOrder(r.root.right)
  def postOrder(self,r):
    if r.root is not None:
      if r.root.left is not None:
        self.preOrder(r.root.left)
      if r.root.right is not None:
        self.preOrder(r.root.right)
      print(r.root.data)
  def levelOrder(self,a):
    q = Queue()
    r = a
    while r is not None:
      print(r.root.data)
      if r.root.left is not None:
        q.add(r.root.left)
      if r.root.right is not None:
        q.add(r.root.right)
      if q.isEmpty():
        print("empty")
        r = None
      else:
        r = q.delete()
r = BinaryTree()
ra = BinaryTree()
ra.makeTree(2,None,None)
rb = BinaryTree()
rb.makeTree(3,None,None)
r.makeTree(1,ra,rb)
print("前序遍历")
r.preOrder(r)
print("中序遍历")
r.inOrder(r)
print("后序遍历")
r.postOrder(r)
print("层级遍历")
r.levelOrder(r)

运行结果:

Python数据结构之栈、队列及二叉树定义与用法浅析

后续实现了会慢慢补上~~旧的也会不断改进~~

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python简单进程锁代码实例
Apr 27 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python2.7安装图文教程
Mar 13 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
详解python pandas 分组统计的方法
Jul 30 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
详解使用Python下载文件的几种方法
Oct 13 Python
python如何实现单链表的反转
Feb 10 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Python中的min及返回最小值索引的操作
May 10 Python
python获取本机所有IP地址的方法
Dec 26 #Python
python检测IP地址变化并触发事件
Dec 26 #Python
python实现自动获取IP并发送到邮箱
Dec 26 #Python
python 实现分页显示从es中获取的数据方法
Dec 26 #Python
python 获取页面表格数据存放到csv中的方法
Dec 26 #Python
python 产生token及token验证的方法
Dec 26 #Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 #Python
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
手机业务员岗位职责
2013/12/13 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android