python資料結構 棧講解

2021-10-13 10:06:07 字數 2930 閱讀 8433

應用實戰

棧有時也稱作下堆疊,是乙個有序集合,以列表的形式,但是他的新增和移除操作總是發生在同一端,被稱為頂端,也叫做棧頂,另一端被稱為低端,也叫棧底。可以理解為在桌子上疊放書本,我們放上去之後如果拿的話也是從上往下拿,放的話則是從下往上,我們往往取的都是放的時間最晚的,就是這個原理。

棧的操作型別有建立,新增,取出,刪除等操作,但是本身並沒有棧,我們只是構建的一種,所以我們需要自己寫乙個棧的**

'''

棧的用法

stack()建立乙個空棧,不需要任何引數,且會返回乙個空棧。

push(item)將元素新增到棧的頂端,但是需要乙個引數item,無返回值

pop()移除棧頂的元素,會返回棧頂

peek()返回棧頂元素,但是不會移除。

isempty()檢查棧是否為空

size()返會棧中的元素數目

'''# 在這之前,我們要寫乙個棧的實現的**

class

stack()

:def

__init__

(self)

: self.item =

defisempty

(self)

:return self.item ==

defpush

(self, items)

:def

pop(self)

:return self.item.pop(

)def

peek

(self)

:return self.item[

len(self.item)-1

]def

size

(self)

:return

len(self.item)

x = stack(

)

我們就簡單的演示以下如何利用棧來解決問題。我們以括號匹配為例。

存在這樣一組括號((())),左括號和右括號數值相等,即為匹配,反之不匹配。我們的確可以直接遍歷分類求法,但是時間複雜度卻高了,我們可以嘗試用棧來解決問題。我們建立乙個空棧,開始對字串進行遍歷,如果是左括號我們就會加入棧表,如果是右括號則棧表中減去乙個,**如下:

# 用棧來解決問題-----匹配括號

defparchecker

(symbolstring)

: s = stack(

) balanced =

true

index =

0while index <

len(symbolstring)

and balanced:

symbol = symbolstring[index]

if symbol ==

'(':

s.push(symbol)

else

:if s.isempty()==

true

: balanced =

false

else

: s.pop(

) index +=

1if balanced and s.isempty():

return

true

else

:return

false

print

(parchecker(

['('

,')'])

)

或許太簡單了,如果我們進行符號匹配吶?有和()怎麼辦啊,不用乙個個分類,依然用棧表解決,**如下(我們只是在十七進行了一點改進呼叫了乙個輔助函式來判斷是否匹配):

# 匹配符號

defparchecker2

(symbolstring)

: s = stack(

) balanced =

true

index =

0while index <

len(symbolstring)

and balanced:

symbol = symbolstring[index]

if symbol in

'(['

return opens.index(

open

)== closes.index(close)

print

(parchecker(

['('

,')'])

)

我們都會進行進製轉換,我們如何讓十進位制轉化為二進位制吶?對二取餘然後倒序即可,這裡我們可以用棧來實現不同進製下的轉換。內容很簡單,**如下(這裡我們新增了一些字母以可以表示十六進製制):

#實現不同進製的數轉化

defbaseconverter

(decnumber, base)

: digits =

'0123456789abcdef'

remstack = stack(

)while decnumber >0:

rem = decnumber % base

remstack.push(rem)

decnumber // base

newstring =

''while

not remstack.isempty():

newstring = newstring + digits[remstack.pop(

)]

棧表的一般應用就到這裡了

當然還有我們的應用實戰,注意python中沒有棧這個結構,我們在用時常常不使用這些語法(除非你已經有這個自己寫的棧的包)。我們在力扣上往往是借用列表然後pop(和上面寫棧的原理一樣)。可以嘗試以下力扣上的題目,這裡給出乙個題目鏈結,可以嘗試以下,相信自己!

力扣84題柱狀圖中最大矩形

資料結構 棧講解

棧的基本原理 知識講解 棧也是一種操作 或者說運算 受到限制的特殊線性表。其插入進棧和刪除操作都限制在表的一端進行,這一端被稱為 棧頂 top 相對a的另一端稱為 棧 bottom 插入操作一般稱之為 進棧 push 或者 壓棧 刪除操作稱之為 出棧 pop 棧的特點是 先進後出 fifo,firs...

(資料結構)棧講解和棧實現

棧的概念 棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo last in first out 的原則。壓棧 棧的插入操作叫做進棧 壓棧 入棧,入資料在棧頂。出棧 棧的刪除操作叫做出棧。出資料也...

python資料結構講解 python資料結構詳解

python中常見的資料結構可以統稱為容器 container 序列 如列表和元組 對映 如字典 以及集合 set 是三類主要的容器。一 序列 列表 元組和字串 序列中的每個元素都有自己的編號。python中有6種內建的序列。其中列表和元組是最常見的型別。其他包括字串 unicode字串 buffe...