class Stack:
def __init__(self):#创建一个空栈
self.items = []
def isEmpty(self):#判断返回栈是否为空
return self.items == []
def push(self, item):#将一个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)
def par(string):
s=Stack()
a=0
balanced=True
i=0
while i<len(string) and balanced:
symbol=string[i]
print('第',i+1,'次循环')
print('symbol的值为',symbol)
print('进入判断前的栈',s.items)
if symbol in'([{':#如果symbol是[{(三者之一
s.push(symbol)
print('symbol==‘([{’时的栈',s.items)
else:
if s.isEmpty():
balanced=False
else:
print('不为空时的栈',s.items)
top=s.pop()
print('此时top为',top)
print('此时symbol为',symbol)
if not match(top,symbol):
balanced=False
print('经过匹配函数的栈',s.items)
i+=1
if balanced and s.isEmpty():
#匹配成功时,栈为空,所有已匹配的(被pop删除了
return True
else:
return False
def match(top,symbol):
a='([{'
#注意为判断a,b中([{的位置
#何时匹配何时不匹配
b=')]}'
print('a中top的位置',a.index(top))
print('b中symbol的位置',b.index(symbol))
return a.index(top)==b.index(symbol)
print(par('([]}'))
print(par('([])'))
通用括号匹配(栈的应用)python(详细注释)
最新推荐文章于 2023-01-02 16:31:27 发布