最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)結構之棧、隊列及二叉樹定義與用法淺析

 更新時間:2018年12月27日 08:38:03   作者:wklken  
這篇文章主要介紹了Python數(shù)據(jù)結構之棧、隊列及二叉樹定義與用法,結合具體實例形式分析了Python數(shù)據(jù)結構中棧、隊列及二叉樹的定義與使用相關操作技巧,需要的朋友可以參考下

本文實例講述了Python數(shù)據(jù)結構之棧、隊列及二叉樹定義與用法。分享給大家供大家參考,具體如下:

目前只實現(xiàn)了三種,棧、隊列和二叉樹,哪天得空繼續(xù)補吧~

1. 棧

#棧
class Stack:
  def __init__(self,size = 16):
    self.stack = []
    self.size = size
    self.top = -1
  def setSize(self, size):
    self.size = size
  def isEmpty(self):
    if self.top == -1:
      return True
    else:
      return False
  def isFull(self):
    if self.top +1 == self.size:
      return True
    else:
      return False
  def top(self):
    if self.isEmpty():
      raise Exception("StackIsEmpty")
    else:
      return self.stack[self.top]
  def push(self,obj):
    if self.isFull():
      raise Exception("StackOverFlow")
    else:
      self.stack.append(obj)
      self.top +=1
  def pop(self):
    if self.isEmpty():
      raise Exception("StackIsEmpty")
    else:
      self.top -= 1
      return self.stack.pop()
  def show(self):
    print(self.stack)
s = Stack(5)
s.push(1)
s.push(2)
s.push(3)
s.push(4)
s.push(5)
s.show()
s.pop()
s.show()
s.push(6)
s.show()

運行結果:

2. 隊列

#隊列
class Queue:
  def __init__(self,size = 16):
    self.queue = []
    self.size = size
    self.front = 0
    self.rear = 0
  def isEmpty(self):
    return self.rear == 0
  def isFull(self):
    if (self.front - self.rear +1) == self.size:
      return True
    else:
      return False
  def first(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.front]
  def last(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.rear]
  def add(self,obj):
    if self.isFull():
      raise Exception("QueueOverFlow")
    else:
      self.queue.append(obj)
      self.rear += 1
  def delete(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      self.rear -=1
      return self.queue.pop(0)
  def show(self):
    print(self.queue)
q = Queue(3)
q.add(1)
q.add(2)
q.show()
q.delete()
q.show()

運行結果:

3. 二叉樹

#隊列
class Queue:
  def __init__(self,size = 16):
    self.queue = []
    self.size = size
    self.front = 0
    self.rear = 0
  def isEmpty(self):
    return self.rear == 0
  def isFull(self):
    if (self.front - self.rear +1) == self.size:
      return True
    else:
      return False
  def first(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.front]
  def last(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      return self.queue[self.rear]
  def add(self,obj):
    if self.isFull():
      raise Exception("QueueOverFlow")
    else:
      self.queue.append(obj)
      self.rear += 1
  def delete(self):
    if self.isEmpty():
      raise Exception("QueueIsEmpty")
    else:
      self.rear -=1
      return self.queue.pop(0)
  def show(self):
    print(self.queue)
#二叉樹
class BinaryTreeNode:
  def __init__(self,data,left,right):
    self.left = left
    self.data = data
    self.right = right
class BinaryTree:
  def __init__(self):
    self.root = None
  def makeTree(self,data,left,right):
    self.root = BinaryTreeNode(data,left,right)
    #left.root = right.root = None
  def isEmpty(self):
    if self.root is None:
      return True
    else:
      return False
  def preOrder(self,r):
    if r.root is not None:
      print(r.root.data)
      if r.root.left is not None:
        self.preOrder(r.root.left)
      if r.root.right is not None:
        self.preOrder(r.root.right)
  def inOrder(self,r):
    if r.root is not None:
      if r.root.left is not None:
        self.inOrder(r.root.left)
      print(r.root.data)
      if r.root.right is not None:
        self.inOrder(r.root.right)
  def postOrder(self,r):
    if r.root is not None:
      if r.root.left is not None:
        self.preOrder(r.root.left)
      if r.root.right is not None:
        self.preOrder(r.root.right)
      print(r.root.data)
  def levelOrder(self,a):
    q = Queue()
    r = a
    while r is not None:
      print(r.root.data)
      if r.root.left is not None:
        q.add(r.root.left)
      if r.root.right is not None:
        q.add(r.root.right)
      if q.isEmpty():
        print("empty")
        r = None
      else:
        r = q.delete()
r = BinaryTree()
ra = BinaryTree()
ra.makeTree(2,None,None)
rb = BinaryTree()
rb.makeTree(3,None,None)
r.makeTree(1,ra,rb)
print("前序遍歷")
r.preOrder(r)
print("中序遍歷")
r.inOrder(r)
print("后序遍歷")
r.postOrder(r)
print("層級遍歷")
r.levelOrder(r)

運行結果:

后續(xù)實現(xiàn)了會慢慢補上~~舊的也會不斷改進~~

更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結構與算法教程》、《Python加密解密算法與技巧總結》、《Python編碼操作技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • Python常用模塊os.path之文件及路徑操作方法

    Python常用模塊os.path之文件及路徑操作方法

    os.path 模塊主要用于獲取文件的屬性。這篇文章主要介紹了Python常用模塊os.path——文件及路徑操作,需要的朋友可以參考下
    2019-12-12
  • django-crontab實現(xiàn)服務端的定時任務的示例代碼

    django-crontab實現(xiàn)服務端的定時任務的示例代碼

    這篇文章主要介紹了django-crontab實現(xiàn)服務端的定時任務的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Python從list類型、range()序列簡單認識類(class)【可迭代】

    Python從list類型、range()序列簡單認識類(class)【可迭代】

    這篇文章主要介紹了Python從list類型、range()序列簡單認識類(class),結合實例形式分析了list、range及自定義類等可迭代數(shù)據(jù)類型相關使用技巧,需要的朋友可以參考下
    2019-05-05
  • Python利用matplotlib模塊數(shù)據(jù)可視化繪制3D圖

    Python利用matplotlib模塊數(shù)據(jù)可視化繪制3D圖

    matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合交互式地行制圖,下面這篇文章主要給大家介紹了關于Python利用matplotlib模塊數(shù)據(jù)可視化實現(xiàn)3D圖的相關資料,需要的朋友可以參考下
    2022-02-02
  • Python Django實現(xiàn)layui風格+django分頁功能的例子

    Python Django實現(xiàn)layui風格+django分頁功能的例子

    今天小編就為大家分享一篇Python Django實現(xiàn)layui風格+django分頁功能的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python中的opencv?圖像梯度

    python中的opencv?圖像梯度

    這篇文章主要介紹了python中的opencv?圖像梯度,圖像梯度計算的是圖像變化的速度,圖像梯度計算需要求導數(shù),但是圖像梯度一般通過計算像素值的差來得到梯度的近似值,下文詳細介紹需要的小伙伴可以參考一下
    2022-06-06
  • pandas進行時間數(shù)據(jù)的轉換和計算時間差并提取年月日

    pandas進行時間數(shù)據(jù)的轉換和計算時間差并提取年月日

    這篇文章主要介紹了pandas進行時間數(shù)據(jù)的轉換和計算時間差并提取年月日,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python 發(fā)送get請求接口詳解

    python 發(fā)送get請求接口詳解

    這篇文章主要介紹了python 發(fā)送get請求接口詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 詳解numpy.ndarray.reshape()函數(shù)的參數(shù)問題

    詳解numpy.ndarray.reshape()函數(shù)的參數(shù)問題

    這篇文章主要介紹了詳解numpy.ndarray.reshape()函數(shù)的參數(shù)問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 基于Python實現(xiàn)ComicReaper漫畫自動爬取腳本過程解析

    基于Python實現(xiàn)ComicReaper漫畫自動爬取腳本過程解析

    這篇文章主要介紹了基于Python實現(xiàn)ComicReaper漫畫自動爬取腳本過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論

灵山县| 环江| 泾源县| 喀喇| 太仓市| 德化县| 玉林市| 仲巴县| 三都| 若羌县| 崇明县| 泽州县| 扎赉特旗| 汕尾市| 喜德县| 永吉县| 闸北区| 阳曲县| 维西| 台中县| 绵阳市| 岳阳市| 巴青县| 大厂| 宁夏| 车险| 江油市| 平度市| 万载县| 宜州市| 伊宁县| 京山县| 聊城市| 北票市| 霍林郭勒市| 绥芬河市| 平顶山市| 江油市| 大竹县| 桃源县| 乃东县|