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 XML RPC服务器端和客户端实例
Nov 22 Python
python多线程用法实例详解
Jan 15 Python
Python中的is和id用法分析
Jan 26 Python
python脚本实现xls(xlsx)转成csv
Apr 10 Python
Python使用matplotlib填充图形指定区域代码示例
Jan 16 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
python实现淘宝购物系统
Oct 25 Python
python异常处理和日志处理方式
Dec 24 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
对象析构函数__del__在Python中何时使用
Mar 22 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
PHP面向对象编程快速入门
2006/12/14 PHP
PHP技术开发技巧分享
2010/03/23 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
Js 中debug方式
2010/02/07 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python生成不重复随机值的方法
2015/05/11 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
WxPython建立批量录入框窗口
2019/02/27 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
python递归法解决棋盘分割问题
2019/07/17 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
40岁生日感言
2014/02/15 职场文书
体育教学随笔感言
2014/02/24 职场文书
医院保洁员管理制度
2015/08/05 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
廉政党课工作报告案例
2019/06/21 职场文书