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之一个免费的实验室
Sep 14 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
python如何实现excel数据添加到mongodb
Jul 30 Python
Python入门_学会创建并调用函数的方法
May 16 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
浅谈Python中(&,|)和(and,or)之间的区别
Aug 07 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
python垃圾回收机制原理分析
Apr 13 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 cookis创建实现代码
2009/03/16 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
vue实现文字加密功能
2019/09/27 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
24式加速你的Python(小结)
2019/06/13 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
python使用smtplib模块发送邮件
2020/12/17 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
写演讲稿要注意的六件事
2014/01/14 职场文书
规范化管理年活动总结
2014/08/29 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
Python可视化神器pyecharts绘制水球图
2022/07/07 Python