資料結構與演算法筆記 8 棧

2021-09-26 03:26:31 字數 1419 閱讀 2949

棧是一種簡單的緩衝儲存結構,它只支援資料項的儲存和訪問,不支援資料項之間的任何關係。

棧具有後進先出的特性。

棧的實現:

基於棧的特性,實現乙個棧可以基於兩種結構,線性表和列表

1. 異常類

class stackunderflow(valueerror):

pass

2. 基於線性表實現棧
class stack(object):

def __init__(self):

self._elems =

def is_empty(self):

return self._elems ==

def top(self):

if self.is_empty():

raise stackunderflow('in stack.top()')

return self._elems[-1]

def push(self, elem):

def pop(self):

if self.is_empty():

raise stackunderflow('in stack.pop()')

return self._elem.pop()

2. 基於鍊錶實現棧

在python中,list結構是基於動態順序表實現的,因此不會出現棧滿的情況,但是,list需要一塊連續的儲存空間(1. 空間代價),當儲存空間滿時需要更換更大的空間,這個擴容的操作代價很高(2. 時間代價);因此,對於這兩個問題,使用鍊錶可以很好的解決。

class node(object):

def __init__(self, elem, next_=none):

self.elem = elem

self.next = next_

class stack(object):

def __init__(self):

self.top = none

def is_empty(self):

return self.top is none

def top(self):

if self.is_empty():

raise stackunderflow('in stack.top()')

return self.top.elem

def push(self, elem):

self.top = node(elem, self.top)

def pop(self):

if self.is_empty():

raise stackunderflow('in stack.pop()')

p = self.top

self.top = p.next

return p.elem

資料結構與演算法 筆記 資料結構與演算法筆記 棧

以前學習的時候都沒怎麼好好的做過筆記,總是東記一點,西寫一點,甚至都不做筆記,導致後面找的時候找不到,最後還是求助搜尋引擎浪費掉很多時間。好腦筋不如個爛筆頭呀。這次又重新學習python的資料結構及演算法 中國mooc上的公開課 就好好做個筆記吧。棧是一種只能在一端進行插入和刪除的線性資料結構。一般...

資料結構與演算法《棧》

概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...

棧(資料結構與演算法)

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...