Python栈的顺序存储结构,顺序栈类的实现,以及使用栈判断输入括号是否匹配算法

废话不多说,直接上代码

更多源码分享请关注

小星博博Giteehttps://gitee.com/xiaoxingbobo-personalhttps://gitee.com/xiaoxingbobo-personal

1、首先添加SqStack顺序栈类

class SqStack:
    # 构造函数
    def __init__(self):
        self.data = []  # 声明空列表,作为栈的存放元素

    # 判断栈是否为空
    def empty(self):
        if len(self.data) == 0:
            return True
        return False

    # 进栈
    def push(self, item):
        self.data.append(item)

    # 出栈
    def pop(self):
        assert not self.empty()  # 判断栈是否为为空
        return self.data.pop()  # pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

    # 取栈顶元素
    def get_top(self):
        assert not self.empty()
        return self.data[-1]  # data[-1]取出倒数第一个数

 2、判断括号是否匹配的算法

实现原理

  1. 遇到左括号先进栈
  2. 遇到右括号时,取出栈顶元素,进行匹配是否时另外一半括号,不是则直接返回false,方法执行完毕
  3. 如果栈顶元素和左括号匹配时,则使栈顶元素出栈,依次进行下一个元素判断
# 导入SqStack
from SqStack import SqStack


def is_match(st):  # 判断表达式的括号是否匹配的算法
    sq = SqStack()  # 创建一个空栈
    i = 0  # 栈的下标
    # while循环栈元素次数
    while i < len(st):
        e = st[i]  # 取出用户输入的元素
        if e == "(" or e == "[" or e == "{":  # 进栈
            sq.push(e)
        else:  # 遇到右括号
            if e == ")":
                if sq.empty() or sq.get_top() != "(":
                    return False
                sq.pop()
            elif e == "]":
                if sq.empty() or sq.get_top() != "[":
                    return False
                sq.pop()

            elif e == "}":
                if sq.empty() or sq.get_top() != "{":
                    return False
                sq.pop()
        i += 1
    return sq.empty()


def print_info(value):
    if is_match(value):
        print(value + "匹配")
    else:
        print(value + "不匹配")


if __name__ == '__main__':
    ipt = input("输入要判断的括号(只支持英文状态):")
    print_info(ipt)

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 47
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随便换个名字吧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值