python中的栈
栈
在各种编程语言数据结构体系中,栈是一种基础数据结构,也是一种常用数据结构
特点
后入先出
常用函数
以python编程语言为例。栈可以使用列表数据结构来实现
栈定义
# python 使用列表来定义栈
stack = []
入栈
# 将元素压入栈
stack.append( a )
入栈其实实现的是对数据的增加
出栈
# 将栈顶元素弹出栈,并返回该元素(只能弹出栈顶元素)
stack.pop()
出栈其实实现的是对数据的删除,始终删除的是栈顶的元素,同时会返回该元素
获取栈顶元素
# 获取栈顶元素
stack[-1]
和出栈函数的相似的是 都能获取栈顶元素,但不同的时,出栈函数会删除栈顶元素,stack[-1]则不会删除。
为啥是-1,不是1 呢?
由于python栈使用列表实现的,栈顶元素其实就是列表最后一个元素,按照列表的反向索引,最后一个元素,可以使用-1索引去访问,当然可以按正向的,使用len -1 去访问,但总归还要计算一个len,没有-1来的直接。
栈是否为空
# 如果栈为空
if not stack:
statement
应用场景
语法编译
编译器在词法分析时,处理括号、花括号,就是使用了栈数据结构
递归函数
每次递归函数调用会把局部变量、参数、返回地址 压入栈中,每次调用完就可以返回上一层位置
括号匹配问题(最经典)
也类似编译器词法分析里 对括号和花括号处理
字符串去重问题
处理相邻重复字符串去重问题
经验总结
1 如果只想获取栈顶元素,而不删除,则可以使用stack[-1]
2 想要遍历栈,貌似只能从栈顶元素不断弹出
3 python实现栈是使用的列表,那就意味着使用stack[n]或者stack[-n]可以遍历栈的元素,也就是把栈当列表使用,但这个时候,栈就不叫栈了吧
4 栈是一端封口,元素从另一端放入和取出,可以根据这句话感受下栈元素变化的特性。