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中type的构造函数参数含义说明
Jun 21 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
Python字符串处理实现单词反转
Jun 14 Python
遗传算法之Python实现代码
Oct 10 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
python虚拟环境完美部署教程
Aug 06 Python
Python中turtle库的使用实例
Sep 09 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
Django数据统计功能count()的使用
Nov 30 Python
python 闭包函数详细介绍
Apr 19 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 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
jcrop基本参数一览
2013/07/16 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
简述数据库的设计过程
2015/06/22 面试题
幼师自荐信范文
2013/10/06 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
我的祖国演讲稿
2014/05/04 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
社区节水倡议书
2015/04/29 职场文书
预备党员介绍人意见
2015/06/01 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
i7 6700处理器相当于i5几代
2022/04/19 数码科技
Golang解析JSON对象
2022/04/30 Golang