python与栈

一、栈

栈又名堆栈,是一种运算受限的线性表。仅允许在表的一端进行插入和删除运算,允许进行插入和删除操作的一端称为栈顶,另一端称为栈底

二、复杂度分析

栈属于常见的一种线性结构,对于进栈和退栈而言,时间复杂度都为O(1)

三、用栈实现检查括号是否匹配

(1)用列表充当栈

(2)列表有pop方法默认弹出列表末尾的最后一个元素

(3)raise抛出异常

(4)思想:判断字符串的每个元素,如果是左括号入栈,如果是右括号,先判断栈是否为空,如果栈为空,则无法出栈,说明不匹配,如果不空,出栈,也就是去掉栈中的一个左括号。将这个字符串的所有元素都处理完之后,在判断这个栈是否为空,如果为空,说明匹配,如果不为空,说明栈中还有左括号未得到匹配,说明不匹配

class Stack:
    def __init__(self,length):#默认属性,出生就有
        self.length=length   #栈的长度
        self.elemlist = []

    #入栈,判断栈满
    def pushelem(self,elem):
        if len(self.elemlist)>=self.length:
            raise IndexError("栈已满")
        elif elem=='(':
            self.elemlist.append(elem)
            # print(elem)

    #出栈,判断栈空
    def popelem(self):
        if self.elemlist:
            self.out=self.elemlist.pop()
        else:
            raise IndexError("栈已空")

    #输出栈顶元素
    def topelem(self):
        if self.elemlist:
            return self.elemlist[-1]

    #判断栈空
    def noelem(self):
        return not bool(self.elemlist)

    #栈的大小
    def lenelem(self):
        return len(self.elemlist)

#处理括号
def judgestack(charelem):
    nstack = Stack(len(charelem))
    for i in range(len(charelem)):
        if charelem[i]=='(':
            nstack.pushelem(charelem[i])
        elif charelem[i]==')':
            if nstack.noelem():#(1)关键
                return False
            else:
                nstack.popelem()
    return nstack.noelem()#(2)关键


if __name__=='__main__':
    charlist=['((()))','((())','(()))']
    for elem in charlist:
        print(elem+str(judgestack(elem)))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值