Python编程实现双链表,栈,队列及二叉树的方法示例


Posted in Python onNovember 01, 2017

本文实例讲述了Python编程实现双链表,栈,队列及二叉树的方法。分享给大家供大家参考,具体如下:

1.双链表

class Node(object):
  def __init__(self, value=None):
    self._prev = None
    self.data = value
    self._next = None
  def __str__(self):
    return "Node(%s)"%self.data
class DoubleLinkedList(object):
  def __init__(self):
    self._head = Node()
  def insert(self, value):
    element = Node(value)
    element._next = self._head
    self._head._prev = element
    self._head = element
  def search(self, value):
    if not self._head._next:
      raise ValueError("the linked list is empty")
    temp = self._head
    while temp.data != value:
      temp = temp._next
    return temp
  def delete(self, value):
    element = self.search(value)
    if not element:
      raise ValueError('delete error: the value not found')
    element._prev._next = element._next
    element._next._prev = element._prev
    return element.data
  def __str__(self):
    values = []
    temp = self._head
    while temp and temp.data:
      values.append(temp.data)
      temp = temp._next
    return "DoubleLinkedList(%s)"%values

2. 栈

class Stack(object):
  def __init__(self):
    self._top = 0
    self._stack = []
  def put(self, data):
    self._stack.insert(self._top, data)
    self._top += 1
  def pop(self):
    if self.isEmpty():
      raise ValueError('stack 为空')
    self._top -= 1
    data = self._stack[self._top]
    return data
  def isEmpty(self):
    if self._top == 0:
      return True
    else:
      return False
  def __str__(self):
    return "Stack(%s)"%self._stack

3.队列

class Queue(object):
  def __init__(self, max_size=float('inf')):
    self._max_size = max_size
    self._top = 0
    self._tail = 0
    self._queue = []
  def put(self, value):
    if self.isFull():
      raise ValueError("the queue is full")
    self._queue.insert(self._tail, value)
    self._tail += 1
  def pop(self):
    if self.isEmpty():
      raise ValueError("the queue is empty")
    data = self._queue.pop(self._top)
    self._top += 1
    return data
  def isEmpty(self):
    if self._top == self._tail:
      return True
    else:
      return False
  def isFull(self):
    if self._tail == self._max_size:
      return True
    else:
      return False
  def __str__(self):
    return "Queue(%s)"%self._queue

4. 二叉树(定义与遍历)

class Node:
  def __init__(self,item):
    self.item = item
    self.child1 = None
    self.child2 = None
class Tree:
  def __init__(self):
    self.root = None
  def add(self, item):
    node = Node(item)
    if self.root is None:
      self.root = node
    else:
      q = [self.root]
      while True:
        pop_node = q.pop(0)
        if pop_node.child1 is None:
          pop_node.child1 = node
          return
        elif pop_node.child2 is None:
          pop_node.child2 = node
          return
        else:
          q.append(pop_node.child1)
          q.append(pop_node.child2)
  def traverse(self): # 层次遍历
    if self.root is None:
      return None
    q = [self.root]
    res = [self.root.item]
    while q != []:
      pop_node = q.pop(0)
      if pop_node.child1 is not None:
        q.append(pop_node.child1)
        res.append(pop_node.child1.item)
      if pop_node.child2 is not None:
        q.append(pop_node.child2)
        res.append(pop_node.child2.item)
    return res
  def preorder(self,root): # 先序遍历
    if root is None:
      return []
    result = [root.item]
    left_item = self.preorder(root.child1)
    right_item = self.preorder(root.child2)
    return result + left_item + right_item
  def inorder(self,root): # 中序序遍历
    if root is None:
      return []
    result = [root.item]
    left_item = self.inorder(root.child1)
    right_item = self.inorder(root.child2)
    return left_item + result + right_item
  def postorder(self,root): # 后序遍历
    if root is None:
      return []
    result = [root.item]
    left_item = self.postorder(root.child1)
    right_item = self.postorder(root.child2)
    return left_item + right_item + result
t = Tree()
for i in range(10):
  t.add(i)
print('层序遍历:',t.traverse())
print('先序遍历:',t.preorder(t.root))
print('中序遍历:',t.inorder(t.root))
print('后序遍历:',t.postorder(t.root))

输出结果:

层次遍历: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
先次遍历: [0, 1, 3, 7, 8, 4, 9, 2, 5, 6]
中次遍历: [7, 3, 8, 1, 9, 4, 0, 5, 2, 6]
后次遍历: [7, 8, 3, 9, 4, 1, 5, 6, 2, 0]

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python抓取京东价格分析京东商品价格走势
Jan 09 Python
sqlalchemy对象转dict的示例
Apr 22 Python
python超简单解决约瑟夫环问题
May 12 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
python解释器spython使用及原理解析
Aug 24 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
Python栈算法的实现与简单应用示例
Nov 01 #Python
Python scikit-learn 做线性回归的示例代码
Nov 01 #Python
机器学习python实战之手写数字识别
Nov 01 #Python
Python定时器实例代码
Nov 01 #Python
机器学习python实战之决策树
Nov 01 #Python
详解Python开发中如何使用Hook技巧
Nov 01 #Python
python利用标准库如何获取本地IP示例详解
Nov 01 #Python
You might like
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
通过C++学习Python
2015/01/20 Python
python绘图方法实例入门
2015/05/19 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
小学教研工作制度
2014/01/15 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
党支部特色活动方案
2014/08/20 职场文书
未中标通知书
2015/04/17 职场文书
大学生就业意向书
2015/05/11 职场文书
建筑工程催款函
2015/06/24 职场文书
昆虫记读书笔记
2015/06/26 职场文书