栈的应用括号匹配python_python数据结构与算法基础#1 stack

本文探讨了栈在Python中的应用,特别是在括号匹配问题上的运用。通过定义栈类并实现相关操作,如push、pop、peek等,利用栈的后进先出特性检查括号对的正确性。文章还提到了针对复杂括号匹配的改进方法,并预告了后续将更新数学竞赛相关的内容。
摘要由CSDN通过智能技术生成

这个系列就是写给自己看看,看看自己能坚持多久,并且把今天的学习内容复习一下

  1. stack:堆栈(英语:stack)又称为堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。[1]
  • 关于stack在python中的实现:使用类来定义栈
  • 栈中的函数:
  • isEmpty() 判断栈是否为空
  • push()把元素入栈
  • pop()把最后一个元素删除并返回
  • peek()显示最后一个元素(栈顶)
  • size()返回栈的大小

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

    def isEmpty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

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

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

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

栈的应用#1

  1. 栈有后进先出的特点,因此可以用来匹配括号,算出是否对称
  • 后进入的括号会先与后面的括号匹配,符合栈的特点

44891b6eaab74dc2e656b68d40b603ac.png
import stack
def parenthesis_matching(parenthesis):
    s = Stack()
    index = 0
    while index < len(parenthesis):
        i = parenthesis[index]
        if i == '(':
            s.push(i)
        else:
            if s.isEmpty() is True:
                return False
            else:
                s.pop()
        index += 1
    if s.isEmpty() is False:
        return False
    else:
        return True

print(parenthesis_matching('(()())'))

运行结果为True

927326939b86f10552c3830c326e0c83.png

关于复杂括号的匹配

  • 需要从括号的判断处进行更改:i要属于({[之一即可入栈,判断是否匹配时使用新函数match()
def match(open, close):
    left = '({['
    right = ')}]'
    return left.index(open) == right.index(close)
#代码主体
def complex_parent_match(parent):
    s = Stack()
    balanced = True
    index = 0
    while index < len(parent) and balanced:
        i = parent[index]
        if i in '([{':
            s.push(i)
        else:
            if s.isEmpty() is True:
                balanced = False
            else:
                if match(s.peek(), i):
                    s.pop()
                else:
                    balanced = False
        index += 1
    if s.isEmpty() is True and balanced:
        return True
    else:
        return False
print(complex_parent_match('([]{})'))

运行结果为True

明天会继续更新一部分数学竞赛内容,希望不会鸽

参考

  1. ^https://zh.wikipedia.org/wiki/%E5%A0%86%E6%A0%88
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值