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 相关文章推荐
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
基于python进行桶排序与基数排序的总结
May 29 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python opencv读mp4视频的实例
Dec 07 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python算法中的时间复杂度问题
Nov 19 Python
python生成器用法实例详解
Nov 22 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
Python多线程的退出控制实现
Aug 10 Python
python实现图片素描效果
Sep 26 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数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
python实现多线程行情抓取工具的方法
2018/02/28 Python
详解Python的循环结构知识点
2019/05/20 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
美国NBA官方商店:NBA Store
2019/04/12 全球购物
九年级物理教学反思
2014/01/29 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
开学典礼决心书
2014/03/11 职场文书
电视购物广告词
2014/03/19 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
大学毕业生推荐信
2014/07/09 职场文书
倡议书格式
2014/08/30 职场文书
离婚协议书怎么写
2014/09/12 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
党员评议个人总结
2014/10/20 职场文书
花木兰观后感
2015/06/10 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS