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从ftp下载数据保存实例
Nov 20 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python利用ansible分发处理任务
Aug 04 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
WxPython建立批量录入框窗口
Feb 27 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
python 轮询执行某函数的2种方式
May 03 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 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/09 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
YII框架http缓存操作示例
2019/04/29 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
JavaScript中的集合及效率
2010/01/08 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python正则表达式re模块详解
2014/06/25 Python
Python检测QQ在线状态的方法
2015/05/09 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
快速了解python leveldb
2018/01/18 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python中的类与类型示例详解
2019/07/10 Python
python flask搭建web应用教程
2019/11/19 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
开学季活动策划方案
2014/02/28 职场文书
大学学风建设方案
2014/05/04 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
雨中的树观后感
2015/06/03 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电