新聞中心
在Python中,stack通常指的是一種后進先出(LIFO,Last In First Out)的數(shù)據(jù)結(jié)構(gòu),它可以用列表(List)或?qū)S玫?code>collections.deque實現(xiàn),這里,我會介紹如何用列表來實現(xiàn)一個簡單的棧,并提供一些基本操作的示例。

創(chuàng)建棧
使用Python列表作為棧的基礎(chǔ)結(jié)構(gòu)非常簡單,因為列表提供了append()和pop()方法,它們分別對應(yīng)于棧的push和pop操作。
創(chuàng)建一個空棧 stack = []
棧的基本操作
push(入棧)
向棧中添加一個新元素,我們使用列表的append()方法。
stack.append('a') # 'a' 被添加到棧頂
stack.append('b') # 'b' 被添加到棧頂,現(xiàn)在棧頂是 'b', 'a' 在下面
pop(出棧)
從棧中移除并返回頂部元素,我們使用列表的pop()方法。
top_element = stack.pop() # 移除并返回 'b' print(top_element) # 輸出: 'b'
peek(查看棧頂元素)
有時我們只想查看棧頂?shù)脑囟灰瞥?,可以通過索引實現(xiàn)。
top_element = stack[1] # 查看棧頂元素,不移除,現(xiàn)在棧頂是 'a' print(top_element) # 輸出: 'a'
is_empty(檢查棧是否為空)
要檢查棧是否為空,我們可以比較列表的長度。
def is_empty(stack):
return len(stack) == 0
print(is_empty(stack)) # 如果棧為空,則輸出 True,否則輸出 False
size(獲取棧的大小)
獲取棧的大小就是獲取列表的長度。
def size(stack):
return len(stack)
print(size(stack)) # 輸出棧內(nèi)元素的數(shù)量
綜合示例
下面是一個簡單的例子,展示了如何使用棧來匹配括號。
def is_matching_parentheses(expr):
stack = []
mapping = {")": "(", "}": "{", "]": "["}
for char in expr:
if char in mapping:
top_element = stack.pop() if stack else '#'
if mapping[char] != top_element:
return False
else:
stack.append(char)
return not stack # 如果棧為空,說明所有括號都匹配成功
測試代碼
print(is_matching_parentheses("(){}[]")) # 輸出 True,因為括號匹配正確
print(is_matching_parentheses("({[]})")) # 輸出 True
print(is_matching_parentheses("({[)]}")) # 輸出 False,因為括號不匹配
在這個例子中,我們使用棧來跟蹤每個未匹配的開括號,當我們遇到閉括號時,我們檢查它是否與棧頂?shù)拈_括號匹配,如果在任何時候閉括號與棧頂?shù)拈_括號不匹配,或者在處理完整個表達式后棧不為空,這意味著括號沒有正確匹配。
總結(jié)來說,棧是一種非?;A(chǔ)且強大的數(shù)據(jù)結(jié)構(gòu),它在算法和程序設(shè)計中扮演著重要角色,Python中的列表由于其靈活性和內(nèi)置的方法,使得實現(xiàn)棧變得簡單而直觀。
文章題目:stack函數(shù)頭文件
標題來源:http://www.dlmjj.cn/article/cosgecc.html


咨詢
建站咨詢
