python--数据结构--栈括号匹配/汉诺塔

文章介绍了如何使用Python定义Stack类,以及Match_blankets函数用于检查输入的括号是否有效并进行匹配,haa函数则是一个递归辅助函数处理多级嵌套括号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Stack:
    def __init__(self):
        self.items = []

    def pop_(self):
        return self.items[-1]

    def pop(self):
        return self.items.pop()

    def get_length(self):
        return len(self.items)

    def push(self, elem):
        return self.items.append(elem)


def Match_blankets(string):
    stack = Stack()
    stack2 = Stack()
    match_dict = {")": "(", "]": "[", "}": "{"}
    for i in string:
        if i in {"(", "[", "{"}:
            stack.push(i)
        elif i in {")", "]", "}"}:
            get_ = stack.pop_()
            if get_ == match_dict[i]:
                stack.pop()
            else:
                stack2.push(i)
        else:
            print("括号不纯!")
            return -1
    if stack.get_length() != stack2.get_length():
        print("匹配失败!")
        return -1
    else:
        for i in stack2.items:
            get_new = stack.pop_()
            if get_new == match_dict[i]:
                stack.pop()
                stack2.pop()
        if stack.get_length() == 0 and stack2.get_length() == 0:
            print("匹配成功!")
            return 0


if __name__ == "__main__":
    string = input("请输入括号!")
    Match_blankets(string)

class Stack:
    def __init__(self):
        self.items = []

    def pop_(self):
        return self.items[-1]

    def pop(self):
        return self.items.pop()

    def get_length(self):
        return len(self.items)

    def push(self, elem):
        return self.items.append(elem)

def haa(stack,stack2,stack3,n):
    if n==1:
        i=stack.pop()
        stack2.push(i)
    else:
        haa(stack,stack3,stack2,n-1)
        j=stack.pop()
        stack2.push(j)
        haa(stack3,stack2,stack,n-1)




if __name__ == "__main__":
    stack = Stack()
    stack2 = Stack()
    stack3 = Stack()
    stack.push(1)
    stack.push(2)
    stack.push(3)
    stack.push(4)
    haa(stack,stack2,stack3,4)
    for i in range(0,4):
        r=stack2.pop()
        print(r)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东箭武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值