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

創(chuàng)建棧
使用Python列表作為棧的基礎(chǔ)結(jié)構(gòu)非常簡(jiǎn)單,因?yàn)榱斜硖峁┝?code>append()和pop()方法,它們分別對(duì)應(yīng)于棧的push和pop操作。
創(chuàng)建一個(gè)空棧 stack = []
棧的基本操作
push(入棧)
向棧中添加一個(gè)新元素,我們使用列表的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í)我們只想查看棧頂?shù)脑囟灰瞥?,可以通過(guò)索引實(shí)現(xiàn)。
top_element = stack[1] # 查看棧頂元素,不移除,現(xiàn)在棧頂是 'a' print(top_element) # 輸出: 'a'
is_empty(檢查棧是否為空)
要檢查棧是否為空,我們可以比較列表的長(zhǎng)度。
def is_empty(stack):
return len(stack) == 0
print(is_empty(stack)) # 如果棧為空,則輸出 True,否則輸出 False
size(獲取棧的大小)
獲取棧的大小就是獲取列表的長(zhǎng)度。
def size(stack):
return len(stack)
print(size(stack)) # 輸出棧內(nèi)元素的數(shù)量
綜合示例
下面是一個(gè)簡(jiǎn)單的例子,展示了如何使用棧來(lái)匹配括號(hào)。
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 # 如果棧為空,說(shuō)明所有括號(hào)都匹配成功
測(cè)試代碼
print(is_matching_parentheses("(){}[]")) # 輸出 True,因?yàn)槔ㄌ?hào)匹配正確
print(is_matching_parentheses("({[]})")) # 輸出 True
print(is_matching_parentheses("({[)]}")) # 輸出 False,因?yàn)槔ㄌ?hào)不匹配
在這個(gè)例子中,我們使用棧來(lái)跟蹤每個(gè)未匹配的開(kāi)括號(hào),當(dāng)我們遇到閉括號(hào)時(shí),我們檢查它是否與棧頂?shù)拈_(kāi)括號(hào)匹配,如果在任何時(shí)候閉括號(hào)與棧頂?shù)拈_(kāi)括號(hào)不匹配,或者在處理完整個(gè)表達(dá)式后棧不為空,這意味著括號(hào)沒(méi)有正確匹配。
總結(jié)來(lái)說(shuō),棧是一種非?;A(chǔ)且強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),它在算法和程序設(shè)計(jì)中扮演著重要角色,Python中的列表由于其靈活性和內(nèi)置的方法,使得實(shí)現(xiàn)棧變得簡(jiǎn)單而直觀。
本文題目:stack函數(shù)頭文件
網(wǎng)頁(yè)路徑:http://fisionsoft.com.cn/article/cosgecc.html


咨詢
建站咨詢
