利用数据结构中的栈实现检查花括号、尖括号、圆括号、方括号是否匹配,相比较网上其他的方法,这种自定义类及函数的方法使用起来更加自动化。
class StackNode(object):
#初始化结点
def __init__(self):
self.data=None
self.next=None
class LinkStack(object):
#初始化链栈
def __init__(self):
self.top=StackNode()
#判断链栈是否为空
def IsEmptyStack(self):
if self.top.next==None:
itop=True
else:
itop=False
return itop
#进栈函数
def PushStack(self,data):
tstacknode=StackNode()
tstacknode.data=data
tstacknode.next=self.top.next
self.top.next=tstacknode
#出栈函数
def PopStack(self):
if self.IsEmptyStack()==True:
print('栈为空')
return
else:
tstacknode=self.top.next
self.top.next=tstacknode.next
return tstacknode.data
#获取栈顶元素
def GetTopStack(self):
if self.IsEmptyStack():
print('栈为空。')
return
else:
return self.top.next.data
#反向输出链栈元素
def ReverseStackTraverse(self):
list1 = []
tStackNode = self.top.next
while tStackNode != None:
result = self.PopStack()
list1.append(result)
tStackNode = tStackNode.next
for i in list1[::-1]:
print(i, end=' ')
def BracketMatch(self,str):
ls=LinkStack()
i=0
while i<len(str):
if str[i]=='{':
ls.PushStack(str[i])
i=i+1
elif str[i]=='}':
if ls.GetTopStack()=='{':
ls.PopStack()
i=i+1
else:
ls.PushStack(str[i])
i=i+1
else:
i=i+1
if ls.IsEmptyStack()==True:
print('括号匹配成功!')
else:
print('括号匹配不成功!')
BK.ReverseStackTraverse()
i=input('请输入文本:')
BK=LinkStack()
BK.BracketMatch(i)