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通过scapy获取局域网所有主机mac地址示例
May 04 Python
python批量制作雷达图的实现方法
Jul 26 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
基于树莓派的语音对话机器人
Jun 17 Python
Python页面加载的等待方式总结
Feb 28 Python
Python序列化模块JSON与Pickle
Jun 05 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加密解密函数详解
2015/10/28 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
json数据的列循环示例
2013/09/06 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
python多线程用法实例详解
2015/01/15 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
python实现定时发送qq消息
2019/01/18 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
Java中compareTo和compare的区别
2016/04/12 面试题
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
大学生创业项目方案
2014/03/08 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL