通用括号匹配(栈的应用)python(详细注释)

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('([])'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值