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获取apk文件URL地址实例
Nov 01 Python
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
Python pymongo模块用法示例
Mar 31 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
对python中的argv和argc使用详解
Dec 15 Python
Django 限制访问频率的思路详解
Dec 24 Python
Python版中国省市经纬度
Feb 11 Python
如何利用Matlab制作一款真正的拼图小游戏
May 11 Python
python中pymysql包操作数据库方法
Apr 19 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中反射的应用
2013/06/18 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
python 快速排序代码
2009/11/23 Python
python多重继承新算法C3介绍
2014/09/28 Python
如何用python整理附件
2018/05/13 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
python 标准差计算的实现(std)
2019/07/29 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
python中pow函数用法及功能说明
2020/12/04 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
挖掘机司机岗位职责
2014/02/12 职场文书
综治目标管理责任书
2015/05/11 职场文书
2016新年问候语大全
2015/11/11 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL