本程序是MOOC学习北京大学陈斌老师课程后,自行改进编写。欢迎大家交流探讨,不断学习进步
程序流程:
括号匹配算法:
1.输入括号表达式
2.如果是左括号的话入栈
3.如果遇到右括号,但是没有左括号与其匹配(栈为空),则括号不匹配
4.如果遇到了右括号且栈不为空,判断右括号和左括号的类型是否一致(比如中括号"[“与”]“匹配,”[“与”)"不匹配),不一致则括号不匹配
5.如果遇到其他字符,就不予处理
6.当括号表达式字符循环结束,栈是空的,则括号匹配;如果栈是非空的,则括号不匹配
源程序.
from Teststack import Stack
def bracMatch(bracketItem):
bracketList = list(bracketItem)
braStack = Stack()
leftbrac = "{[("
rightbrac = "}])"
result = True
for item in bracketList:
if item in leftbrac:
braStack.push(item)
elif item in rightbrac:
if braStack.isEmpty():
result = False
else:
if matchBoth(braStack.peek(),item):
braStack.pop()
else:
result = False
if braStack.isEmpty() and result:
result = True
else:
result = False
return result
def matchBoth(item1,item2):
leftbrac = "{[("
rightbrac = "}])"
return leftbrac.index(item1) == rightbrac.index(item2)
if __name__ == "__main__":
str = input("请输入表达式")
if bracMatch(str):
print("括号匹配")
else:
print("括号不匹配")
栈的定义类文件Teststack.py
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
输出结果