python数据结构:栈(匹配花括号、尖括号、圆括号、方括号)

  利用数据结构中的栈实现检查花括号、尖括号、圆括号、方括号是否匹配,相比较网上其他的方法,这种自定义类及函数的方法使用起来更加自动化。

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)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值