国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python編程實現雙鏈表,棧,隊列及二叉樹的方法示例

2020-02-16 10:33:19
字體:
來源:轉載
供稿:網友

本文實例講述了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.dataclass 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 = Noneclass 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 + resultt = 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))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 务川| 东丰县| 通榆县| 通渭县| 汉川市| 永泰县| 焉耆| 长沙县| 昌江| 河津市| 容城县| 克什克腾旗| 哈尔滨市| 井冈山市| 泸州市| 怀宁县| 广元市| 荔浦县| 宁海县| 本溪市| 米易县| 谢通门县| 九龙坡区| 栖霞市| 额尔古纳市| 许昌市| 安义县| 佛冈县| 屯留县| 保亭| 吴桥县| 义马市| 香河县| 成武县| 龙州县| 白河县| 枞阳县| 万载县| 恭城| 新密市| 郯城县|