所有動畫演示可以在visualgo這個**上找到。
棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。
棧允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。
複雜度分析
棧屬於常見的一種線性結構,對於進棧和退棧而言,時間複雜度都為 o(1)。
棧的應用class
stack
(object):
def__init__
(self, limit=10)
: self.stack =
# 存放元素
self.limit = limit # 棧容量極限
defpush
(self, data)
:# push 進棧,將新元素放在棧頂
# 判斷棧是否溢位
iflen
(self.stack)
>= self.limit:
raise indexerror(
'超出棧容量極限'
)# 丟擲異常
defpop
(self)
:# pop 退棧,從棧頂移出乙個資料
if self.stack:
return self.stack.pop(
)# 列表類的內建函式
else
:# 空棧不能被彈出元素
raise indexerror(
'pop from an empty stack'
)def
peek
(self)
:# 檢視棧的棧頂元素(最上面的元素)
if self.stack:
return self.stack[-1
]def
is_empty
(self)
:# 判斷棧是否為空
return
notbool
(self.stack)
# not是乙個布林運算子,它返回值的布林逆
defsize
(self)
:# 返回棧的大小
return
len(self.stack)
在這個實驗中,我們要求使用乙個堆疊檢查括號字串是否平衡。
舉例:((())): true
((()): false
(())): false
def
balanced_parentheses
(parentheses)
: stack = stack(
len(parentheses)
)for parenthesis in parentheses:
if parenthesis ==
'(':
stack.push(parenthesis)
elif parenthesis ==
')':
if stack.is_empty():
# 如果這時棧內為空,說明括號沒有匹配完全
return
false
stack.pop(
)return stack.is_empty(
)# 判斷棧是否為空,如果為空,說明括號全部匹配
if __name__ ==
'__main__'
: examples =
['((()))'
,'((())'
,'(()))'
('balanced parentheses demonstration:\n'
)for example in examples:
(example +
': '
+str
(balanced_parentheses(example)
))
Python資料結構 棧
棧在python中屬於擴充套件資料結構,棧屬於一端開口一端封閉的容器,只允許在一端插入和刪除的線性表 top 插入刪除端,棧頂 push 入棧 壓棧 資料a進入棧頂,當資料b入棧,就到了棧頂,a壓入到棧頂的下乙個位置。棧只能對棧頂的位置進行操作,等b出棧後,方可對a操作。pop 出棧 退棧 gett...
Python資料結構 棧
棧是一種呈線性排列的資料結構。特點是 先進後出 或 後進先出 last in first out,簡稱lifo 主要操作有兩種 入棧push 操作和出棧pop 操作,對應於增加和刪除操作,棧的增加和刪除資料只能在棧頂進行。程式 coding utf 8 created on fri jul 26 1...
資料結構 python 棧
1.棧 stack 有進有出,有順序結構和鍊錶結構。在操作上有進有出,形成了線性結構的關係。1 鍊錶結構,在記憶體上儲存的位置可以是一塊一塊的,通過指標的指向將他們連線在一起。可以靈活運用記憶體,但演算法較為複雜。2 順序結構,是用陣列來實現,比較簡單,但是陣列大小是事先規劃好的,大了浪費記憶體,小...