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单线程实现多个定时器示例
Mar 30 Python
python生成器generator用法实例分析
Jun 04 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
Python聊天室程序(基础版)
Apr 01 Python
pandas数据分组和聚合操作方法
Apr 11 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Python 学习教程之networkx
Apr 15 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python3读取autocad图形文件.py实例
Jun 05 Python
Django如何实现密码错误报错提醒
Sep 04 Python
python基于opencv实现人脸识别
Jan 04 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
合作指挥官:孟斯克
2020/03/16 星际争霸
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
bootstrap实现tab选项卡切换
2020/08/09 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Django框架创建项目的方法入门教程
2019/11/04 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
Python 实现集合Set的示例
2020/12/21 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
css3隔行变换色实现示例
2014/02/19 HTML / CSS
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
高中毕业自我鉴定
2013/12/16 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
2015年党建工作总结
2015/03/30 职场文书
校长新学期寄语2016
2015/12/04 职场文书