python的資料結構之棧

2021-08-23 14:43:46 字數 3559 閱讀 7168

棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。棧被稱為一種後入先出(lifo,last-in-first-out)的資料結構。

由於棧具有後入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元素,必須先拿掉上面的元素。

對棧的兩種主要操作是將乙個元素壓入棧和將乙個元素彈出棧。入棧使用push()方法,出棧使用pop()方法。下圖演示了入棧和出棧的過程。

另乙個常用的操作是預覽棧頂的元素。pop()方法雖然可以訪問棧頂的元素,但是呼叫該方法後,棧頂元素也從棧中被永久性地刪除了。peek()方法則只返回棧頂元素,而不刪除它。

為了記錄棧頂元素的位置,同時也為了標記**可以加入新元素,我們使用變數top,當向棧內壓入元素時,該變數增大;從棧內彈出元素時,該變數減小。

push()、pop()和peek()是棧的3個主要方法,但是棧還有其他方法和屬性。

stack通常的操作:

1

2

3

4

5

6

stack()    建立乙個空的棧物件

push()     把乙個元素新增到棧的最頂層

pop()      刪除棧最頂層的元素,並返回這個元素

peek()     返回最頂層的元素,並不刪除它

isempty()  判斷棧是否為空

size()     返回棧中元素的個數

簡單案例以及操作結果:

這裡使用python的list物件模擬棧的實現:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

classstack:

"""模擬棧"""

def__init__(self):

self.items=

defisempty(self):

returnlen(self.items)==0

defpush(self, item):

self

defpop(self):

returnself.items.pop()

defpeek(self):

ifnotself.isempty():

returnself.items[len(self.items)-1]

defsize(self):

returnlen(self.items)

建立乙個棧物件,並加入操作方法:

1

2

3

4

5

6

7

8

9

10

11

12

s=stack()

print(s.isempty())

s.push(4)

s.push('dog')

print(s.peek())

s.push(true)

print(s.size())

print(s.isempty())

s.push(8.4)

print(s.pop())

print(s.pop())

print(s.size())

Python資料結構之棧

容器 作為容器資料結構,它們保證存入的元素被儲存在容器裡,尚未明確刪除的元素總是可以訪問,而取出並刪除的元素就不再存在於容器中了 棧 棧主要用於在計算過程中儲存臨時的資料,這些資料是計算中發現或者產生的,在後面的計算中可能需要使用它們 棧是最簡單的快取結構,它支援資料項的儲存和訪問,不支援資料項之間...

Python資料結構之 棧

什麼是棧?棧是一種先進先出的儲存器,只可以通過乙個入口訪問其中的資料項。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素...

python資料結構之棧

1.棧的特點 先出,實際上就是對順序表和煉表的進一步封裝。棧可以用順序表表示,也可以用鍊錶表示。用鍊錶構造棧 方法一 在鍊錶頭部新增元素,並在頭部取出元素,相應的時間複雜度為o 1 方法二 在鍊錶尾部新增元素,並在尾部取出元素,因為要遍歷整個鍊錶,相應的時間複雜度為o n 因此,選用方法一。3.關於...