生活随笔
收集整理的這篇文章主要介紹了
python栈与队列的封装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
項目案例一:棧的封裝
- 棧是限制在一端進行插入操作和刪除操作的線性表(俗稱堆棧),允許進行操作的一端稱為“棧頂”,另一固定端稱為“棧底”,當棧中沒有元素時稱為“空?!?。向一個棧內插入元素稱為是進棧,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 item
def is_empty(self
):"""判斷棧是否為空"""return len(self
.stack
) == 0def top(self
):"""返回棧頂元素"""if self
.is_empty
():raise Exception
('棧為空')return self
.stack
[-1]def __len__(self
):"""魔術方法,len(object)自動執行的方法"""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
())
代碼運行結果:
項目案例: 隊列的封裝
- 隊列是限制在一端進行插入操作和另一端刪除操作的線性表,允許進行插入操作的一端稱為“隊尾”,允許進行刪除操作的一端稱為“隊頭”
,當隊列中沒有元素時稱為“空隊”。 - 特點 :先進先出(FIFO)。
class Queue(object):"""隊列的封裝[1,2,3,4]1.列表的左側為隊尾2.列表的右側為隊頭"""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 item
def __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
())
代碼運行結果:
項目案例:二叉樹的封裝
參考博客: 二叉樹封裝
二叉樹是樹的特殊一種,具有如下特點:1、每個結點最多有兩顆子樹,結點的度最大為2。2、左子樹和右子樹是有順序的,次序不能顛倒。3、即使某結點只有一個子樹,也要區分左右子樹。
"""
二叉樹:
"""class Node(object):"""節點類"""def __init__(self
, val
=None, left
=None, right
=None):self
.val
= valself
.left
= leftself
.right
= right
class BinaryTree(object):"""封裝二叉樹"""def __init__(self
, root
):self
.root
= root
def 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
= node10bt
.pre_travel
(node1
)
遍歷結果:
總結
以上是生活随笔為你收集整理的python栈与队列的封装的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。