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中unittest用法实例
Sep 25 Python
用Python编写一个简单的FUSE文件系统的教程
Apr 02 Python
python实现批量监控网站
Sep 09 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
PyTorch 导数应用的使用教程
Aug 31 Python
Python join()函数原理及使用方法
Nov 14 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生成缩略图的代码
2011/01/12 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
PDO::errorInfo讲解
2019/01/28 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
React路由鉴权的实现方法
2019/09/05 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
web.py中调用文件夹内模板的方法
2014/08/26 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
python程序变成软件的实操方法
2019/06/24 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
求职信模板怎么做
2014/01/26 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
感恩教师节主题班会
2015/08/12 职场文书
2016春节放假通知范文
2015/08/18 职场文书
Python中的变量与常量
2021/11/11 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python