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调用命令行进度条的方法
May 05 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python多线程爬虫简单示例
Mar 04 Python
python中星号变量的几种特殊用法
Sep 07 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
快速排序的四种python实现(推荐)
Apr 03 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
python 怎样进行内存管理
Nov 10 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 第二节 数据类型之数组
2012/04/28 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
php二维数组转成字符串示例
2014/02/17 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python的pycurl包用法简介
2015/11/13 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
运动会开幕式解说词
2014/02/05 职场文书
给老师的一封建议书
2014/03/13 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
小学生思想品德评语
2014/12/31 职场文书
2015年信访工作总结
2015/04/07 职场文书
2015团员个人年度总结
2015/11/24 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python