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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
python之wxPython应用实例
Sep 28 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
Python argv用法详解
Jan 08 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
Python 函数基础知识汇总
Mar 09 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
Django admin model 汉化显示文字的实现方法
Aug 12 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
python中threading开启关闭线程操作
May 02 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
Laravel5权限管理方法详解
2016/07/26 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
JS Timing
2007/04/21 Javascript
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
Python 从相对路径下import的方法
2018/12/04 Python
Django框架自定义session处理操作示例
2019/05/27 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
python在协程中增加任务实例操作
2021/02/28 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
C#面试题
2016/05/06 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
后勤人员自我鉴定
2013/10/20 职场文书
求职者简历中的自我评价
2013/10/20 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书