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 21 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Python Django搭建文件下载服务器的实现
May 10 Python
Python 线程池模块之多线程操作代码
May 20 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
angular5 httpclient的示例实战
2018/03/12 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
python中异常捕获方法详解
2017/03/03 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
PHP高级工程师面试问题推荐
2013/01/18 面试题
保护环境建议书100字
2014/05/13 职场文书
科技工作者先进事迹
2014/08/16 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2014年维稳工作总结
2014/11/18 职场文书
企业2014年度工作总结
2014/12/10 职场文书
环卫工人慰问信
2015/02/15 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
速龙x4-860k处理器相当于i几
2022/04/20 数码科技
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript