栈又称之为堆栈是一个特殊的有序表,其插入和删除操作都在栈顶进行操作,并且按照先进后出,后进先出的规则进行运作。
一般栈的数据接口:
在Python中,列表就类似是一个栈,提供接口如下
括号匹配
假如表达式中允许包含三个中括号()、{}、[],其嵌套顺序是任意的,例如:
正确的格式:
{()[()]},[{({})}]
错误的格式:
[(]),[()),(()}
编写一个函数,判断一个表达式字符串,括号匹配是否正确
思路:
1、定义两个数组LEFT和RIGHT,LEFT里面是左括号,RIGHT是右括号,两个括号的内容是对应的。
2、在函数中定义stack数组,循环判断的表达式,若其是左括号里面的,则进栈,若其是右括号里面的内容,则先找到其在右括号里对应的索引,然后根据索引找到左括号里面的内容。
3、判断stack末尾和找到的左括号里面的内容是否相等,若相等,则出栈,若不相等,则直接退出。
4、循环结束后,判断stack里面是否为空,若为空,则输出匹配,否则就是不匹配。
# _*_ coding:utf-8 _*_
LEFT = ['(', '[', '{'] # 左括号
RIGHT = [')', ']', '}'] # 右括号
def match(expr):
stack = []
for item in expr:
if item in LEFT:
stack.append(item)
elif item in RIGHT:
a = RIGHT.index(item)
if stack[-1] == LEFT[a]:
stack.pop(-1)
else:
return print("不匹配")
if len(stack) !=0:
print('不匹配')
else:
print('匹配')