python数据结构栈01(简单栈的实现)
一、什么是栈
我们可以把栈想成叠起来的盘子和书如下图,每次拿都是取最上面的一个。
在栈中,数据的加入和移除都在一端,这一端交栈顶,另一端叫栈底。
在整一张栈的图:
栈,遵循“先进后出”的原则,先进入的数据就在里面待的时间越长。所以栈的特性我们也就知道了“反转序列”。
就比如我们的网页,点击前进后退,就是进栈和出栈的过程
如果你不想把上方当作栈顶,那么你就把上图横过来,这样看,就可以把栈顶,当作栈底来使了,但是你必须保证的是数据只在一头发生变换。
1.python实现栈
既然知道了栈的原理,那么怎么实现呢。
首先我们需要了解python中的几个函数
- append() 增加 复杂度O(1),默认加在最后
- 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)
🆗,结束,结束,结束
干饭,冲冲冲