python数据结构栈01(简单栈的实现)

本文介绍了栈的概念及其在Python中的实现,包括使用内置list和自定义栈类的方法。通过一个具体的例子展示了如何利用栈解决LeetCode的20题——有效的括号问题,强调了栈在解决此类问题中的应用。此外,还提供了栈操作的基本函数如append()和pop()的使用说明。

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

python数据结构栈01(简单栈的实现)


一、什么是栈

我们可以把栈想成叠起来的盘子和书如下图,每次拿都是取最上面的一个。

在栈中,数据的加入和移除都在一端,这一端交栈顶,另一端叫栈底。
在整一张栈的图:

栈,遵循“先进后出”的原则,先进入的数据就在里面待的时间越长。所以栈的特性我们也就知道了“反转序列”。
就比如我们的网页,点击前进后退,就是进栈和出栈的过程
在这里插入图片描述
如果你不想把上方当作栈顶,那么你就把上图横过来,这样看,就可以把栈顶,当作栈底来使了,但是你必须保证的是数据只在一头发生变换。

1.python实现栈

既然知道了栈的原理,那么怎么实现呢。
首先我们需要了解python中的几个函数

  1. append() 增加 复杂度O(1),默认加在最后
  2. pop() 删除 复杂度O(1)

但是要注意的是pop()函数,pop()默认删除最后一位,所以复杂度是O(1),但当你想删除某一位时,pop(i)的复杂度就变成了O(n)

首先定义一个栈
stack = list()
接下来就是往栈里面存入数据
stack.append(4)
stack.append(cat)
删除栈中的数据,默认最后一位
stack.pop()

当然你也可以自己去定义

class Static:
    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[len(self.items)-1]

    def size(self):  #计算栈的长度
        return len(self.items)

在这里插入图片描述

来,实操

题目来源于leetcode的20题有效的括号
在这里插入图片描述
实现:
首先呢,你需要判断该字符串的长度,如果为奇数,不用想,肯定是不符合的

if len(s)%2 == 1:
	return False
class Solution:
    def isValid(self, s: str) -> bool:
        def stack_matching(s):
            stack = list()
            index = 0
            balanced = True
            while index<len(s) and balanced:
                symbol = s[index]
                if symbol in '{[(':
                    stack.append(symbol)
                else:
                    if len(stack)==0 and balanced:
                        balanced = False                     
                    else:
                        top = stack[-1]
                        left = '{[('
                        right = '}])'
                        if left.index(top) == right.index(symbol):
                            stack.pop()
                        else:
                            balanced = False
                index +=1
            if len(stack)==0 and balanced:
                return True
            else:
                return False
        if len(s)%2==1:
            return False
        else:
            return stack_matching(s)

在这里插入图片描述
🆗,结束,结束,结束
在这里插入图片描述
干饭,冲冲冲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值