棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。棧被稱為一種後入先出(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
class
stack:
"""模擬棧"""
def
__init__(
self
):
self
.items
=
def
isempty(
self
):
return
len
(
self
.items)
=
=
0
def
push(
self
, item):
self
def
pop(
self
):
return
self
.items.pop()
def
peek(
self
):
if
not
self
.isempty():
return
self
.items[
len
(
self
.items)
-
1
]
def
size(
self
):
return
len
(
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.關於...