資料結構 python 棧

2021-10-05 15:27:34 字數 2073 閱讀 1628

所有動畫演示可以在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 =

['((()))'

,'((())'

,'(()))'

]print

('balanced parentheses demonstration:\n'

)for example in examples:

print

(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 順序結構,是用陣列來實現,比較簡單,但是陣列大小是事先規劃好的,大了浪費記憶體,小...