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垃圾回收机制
Feb 12 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
python实现在线翻译功能
Mar 03 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
python 进程池pool使用详解
Oct 15 Python
python 通过使用Yolact训练数据集
Apr 06 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中执行cmd命令的方法
2014/10/11 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
JavaScript版代码高亮
2006/06/26 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python抽象类的新写法
2015/06/18 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
初中三年学生的学习自我评价
2013/11/13 职场文书
大学生标准推荐信范文
2013/11/25 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
基层工作经验证明样本
2014/11/16 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
利用js实现简单开关灯代码
2021/11/23 Javascript