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

首頁 > 編程 > Python > 正文

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

2020-01-04 16:26:52
字體:
來源:轉載
供稿:網友

本文實例講述了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))

輸出結果:

層次遍歷: [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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐平市| 大城县| 清苑县| 大安市| 达州市| 龙海市| 五峰| 章丘市| 峨眉山市| 古丈县| 桃园县| 杨浦区| 靖安县| 布尔津县| 金川县| 日土县| 穆棱市| 肇源县| 铁力市| 横山县| 汉源县| 常熟市| 赣州市| 吉林市| 平顶山市| 天镇县| 乌兰县| 康平县| 宁德市| 莱西市| 祥云县| 江都市| 乌拉特前旗| 鲁甸县| 长沙市| 祁门县| 高雄市| 灵寿县| 那坡县| 哈密市| 东阳市|