棧(stack)是一個後進先出的線性表,只允許在棧頂插入和刪除元素
棧的結構
棧的接口
- push() :入棧
- pop() : 出棧
- top() : 獲取棧頂元素
- empty(): 判空
- size():棧中元素的個數
Python中的列表(list)就類似一個棧,對應的接口實現:
棧的應用–括號匹配
- 先創建一個棧,保存爲匹配得左括號
- 遍歷字符串
- 如果是左括號入棧
- 如果是右括號
- 此時如果棧空,右括號多於左括號
- 取棧頂元素,如果匹配則元素出棧,否則括號匹配次序錯誤
- 出循環後,如果棧空,則匹配正確;否則左括號多
left = {'{','[','('}
right = {'}',']',')'}
def match(Str):
s = []#創建棧
for c in Str: #遍歷字符串
if c in left: #左括號
s.append(c)
elif c in right:#右括號
if not s:
print('右括號多')
return #直接返回
elif (c is ')'and s[-1] is '(' )or (c is ']' and s[-1] is '[') or (c is '}' and s[-1] is '{'):
s.pop()
continue
else:
print('括號次序匹配不正確')
return
if not s:
print('括號匹配正確')
else:
print('左括號多')
Str = input()#輸入表達式
match(Str)