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定时器实例代码
Nov 01 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python实现一组典型数据格式转换
Dec 15 Python
python3.6生成器yield用法实例分析
Aug 23 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
如何在django中运行scrapy框架
Apr 22 Python
教你用python实现12306余票查询
Jun 30 Python
微信小程序调用python模型
Apr 21 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日历[测试通过]
2008/03/27 PHP
分享10段PHP常用代码
2015/11/11 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
node 版本切换的实现
2020/02/02 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
Python  连接字符串(join %)
2008/09/06 Python
使用python实现接口的方法
2017/07/07 Python
python删除某个字符
2018/03/19 Python
Django中使用Celery的教程详解
2018/08/24 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
致全体运动员广播稿
2014/02/01 职场文书
爱我中华演讲稿
2014/05/20 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
董事长助理岗位职责
2015/02/11 职场文书
公司员工管理制度
2015/08/04 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL