栈:
stack 一组元素组成的线性序列,只允许在一端栈顶(进出口)进行加入和输出数据,栈底(不可操作)。
- 特性:LIFO: 后进先出。
栈的应用:
- 逆序输出:进制转换
- 括号匹配:‘(’消去一对紧邻的左右括号,不影响全局的匹配判断。 左括号入栈,遇到右括号,匹配的话出栈。栈可以考虑多种不同的括号(方括号,圆括号)
- 栈混洗:按照某种规则,对栈中的元素进行排列。需要中转栈。(所有可能的出栈序列)
- 延迟缓冲
- 中缀表达式:就是常见的数学运算表达式,例如:4+2x3-10/5
- 栈式计算
逆波兰表达式RPN(后序表达式): 由运算符合操作数组成的表达式,不使用括号,即可表示带优先级的运算关系。
RPN转换:(0!+1)^(2*3!+4-5) ----> 0 ! 1+2 3! * 4 + 5 - ^
Python 栈的实现
栈可以用顺序表实现,也可以用链表实现。
栈的操作
- Stack() 创建一个新的空栈
- push(item) 添加一个新的元素item到栈顶
- pop() 弹出栈顶元素
- peek() 返回栈顶元素
- is_empty() 判断栈是否为空
- size() 返回栈的元素个数
class Stack(object):
"""栈"""
def __init__(self):
self.items = []
def is_empty(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)
if __name__ == '__main__':
stack = Stack()
stack.push('first')
stack.push('second')
stack.push('third')
stack.push('Scrat')
print(stack.size())
print(stack.peek())
print(stack.pop())
print(stack.pop())
print(stack.pop())
print(stack.pop())
运行:
4
Scrat
Scrat
third
second
first
更多: Python 目录