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访问系统环境变量的方法
Apr 29 Python
python解析xml文件实例分析
May 27 Python
Python中int()函数的用法浅析
Oct 17 Python
AI人工智能 Python实现人机对话
Nov 13 Python
Python语言实现将图片转化为html页面
Dec 06 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
python tkinter实现屏保程序
Jul 30 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Python如何在循环内使用list.remove()
Jun 01 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 Python
Python anaconda安装库命令详解
Oct 16 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
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
PyQt5实现拖放功能
2018/04/25 Python
Python中最大递归深度值的探讨
2019/03/05 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
shallow copy和deep copy的区别
2016/05/09 面试题
一些网络技术方面的面试题
2014/05/01 面试题
运动会获奖感言
2014/02/11 职场文书
仓管员岗位责任制
2014/02/19 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
先进员工获奖感言
2014/08/14 职场文书
2014年团队工作总结
2014/11/24 职场文书
中班下学期个人总结
2015/02/12 职场文书
2016继续教育研修日志
2015/11/13 职场文书