日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python栈与队列的封装

發(fā)布時間:2024/9/3 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python栈与队列的封装 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項目案例一:棧的封裝

  • 棧是限制在一端進行插入操作和刪除操作的線性表(俗稱堆棧),允許進行操作的一端稱為“棧頂”,另一固定端稱為“棧底”,當(dāng)棧中沒有元素時稱為“空棧”。向一個棧內(nèi)插入元素稱為是進棧,push;從一個棧刪除元素稱為是出棧,pop。
  • 特點 :后進先出(LIFO)。

    代碼:
class Stack(object):"""棧的封裝[1,2,3,4]"""def __init__(self):self.stack = []def push(self,value):"""入棧"""self.stack.append(value)print(f"入棧元素是{value}")def pop(self):"""出棧"""if self.is_empty():raise Exception('棧為空')item = self.stack.pop()print(f"出棧元素是{item}")return itemdef is_empty(self):"""判斷棧是否為空"""return len(self.stack) == 0def top(self):"""返回棧頂元素"""if self.is_empty():raise Exception('棧為空')return self.stack[-1]def __len__(self):"""魔術(shù)方法,len(object)自動執(zhí)行的方法"""return len(self.stack)if __name__ == '__main__':stack = Stack()stack.push(1)stack.push(2)stack.push(3)print(len(stack))stack.pop()print(stack.is_empty())print(stack.top())

代碼運行結(jié)果:

項目案例: 隊列的封裝

  • 隊列是限制在一端進行插入操作和另一端刪除操作的線性表,允許進行插入操作的一端稱為“隊尾”,允許進行刪除操作的一端稱為“隊頭”
    ,當(dāng)隊列中沒有元素時稱為“空隊”。
  • 特點 :先進先出(FIFO)。


class Queue(object):"""隊列的封裝[1,2,3,4]1.列表的左側(cè)為隊尾2.列表的右側(cè)為隊頭"""def __init__(self):self.queue = []def enqueue(self,value):"""入隊"""self.queue.insert(0,value)print(f"入隊元素是{value}")def dequeue(self):"""出隊"""if self.is_empty():raise Exception('隊列為空')item = self.queue.pop()print("出隊元素為{item}")return itemdef __len__(self):"""獲取隊列的長度"""return len(self.queue)def first(self):"""返回隊頭元素"""if self.is_empty():raise Exception('隊列為空')return self.queue[-1]def is_empty(self):"""判斷棧是否為空"""return len(self.queue) == 0def last(self):"""獲取隊尾元素"""if self.is_empty():raise Exception('隊列為空')return self.queue[0]if __name__ == '__main__':queue = Queue()queue.enqueue(1)queue.enqueue(2)queue.enqueue(3)print(queue.is_empty())queue.dequeue()print(queue.first())print(queue.last())

代碼運行結(jié)果:

項目案例:二叉樹的封裝

參考博客: 二叉樹封裝

二叉樹是樹的特殊一種,具有如下特點:1、每個結(jié)點最多有兩顆子樹,結(jié)點的度最大為2。2、左子樹和右子樹是有順序的,次序不能顛倒。3、即使某結(jié)點只有一個子樹,也要區(qū)分左右子樹。

""" 二叉樹: """class Node(object):"""節(jié)點類"""def __init__(self, val=None, left=None, right=None):self.val = valself.left = leftself.right = rightclass BinaryTree(object):"""封裝二叉樹"""def __init__(self, root):self.root = rootdef pre_travel(self, root):"""先序遍歷: 根左右"""if (root != None):print(root.val)self.pre_travel(root.left)self.pre_travel(root.right)def in_travel(self, root):"""中序遍歷: 左根右"""if (root != None):self.in_travel(root.left)print(root.val)self.in_travel(root.right)def last_travel(self, root):"""后序遍歷: 左右根"""if (root != None):self.last_travel(root.left)self.last_travel(root.right)print(root.val) if __name__ == '__main__':node1 = Node(1)node2 = Node(2)node3 = Node(3)node4 = Node(4)node5 = Node(5)node6 = Node(6)node7 = Node(7)node8 = Node(8)node9 = Node(9)node10 = Node(10)bt = BinaryTree(root=node1)node1.left = node2node1.right = node3node2.left = node4node2.right= node5node3.left = node6node3.right = node7node4.left = node8node4.right = node9node5.left = node10# 先序遍歷bt.pre_travel(node1)

遍歷結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的python栈与队列的封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。