下面是详细讲解“Python算法之栈(stack)的实现”的完整攻略,包括栈的基本概念、Python实现和两个示例说明。
栈的基本概念
栈(stack)是一线性数据结构,具有后进先出(LIFO)的特点,即最后进入的元素最先被访问。栈有两个基本操作:入栈(push)和出栈(pop)。入栈操作将元素添加到栈顶,出栈操作将栈顶元素移除并返回。栈还有一个重要的操作:查看栈顶元素(peek),该操作返回栈顶元素但不移除。
Python实现代码
以下是Python实现栈的示例代码:
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
def peek(self):
if not self.is_empty():
return self.items[-1]
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
上述代码中,定义了一个Stack类表示栈,包括入栈、出栈、查看栈顶元素、判断栈是否为空和获取栈的大小等方法。其中,入栈操作使用append方法将元素添加到列表末尾,出栈操作使用pop方法移除列表末尾元素并返回,查看栈顶元素操作使用索引-1获取列表末尾元素,判断栈是否为空操作使用len方法判断列表长度是否为0,获取栈的大小操作使用len方法获取列表长度。
示例说明
以下是两个示例,说明如何使用Stack类进行操作。
示例1
使用Stack类实现括号匹配。
def is_valid_parentheses(s):
stack = Stack()
for c in s:
if c == "(":
stack.push(c)
elif c == ")":
if stack.is_empty():
return False
stack.pop()
return stack.is_empty()
print(is_valid_parentheses("()")) # True
print(is_valid_parentheses("()[]{}")) # True
print(is_valid_parentheses("(]")) # False
print(is_valid_parentheses("([)]")) # False
print(is_valid_parentheses("{[]}")) # True
输出结果:
True
True
False
False
True
示例2
使用Stack类实现逆波兰表达式求值。
def eval_rpn(tokens):
stack =()
for token in tokens:
if token in ["+", "-", "*", "/"]:
b = stack.pop()
a = stack.pop()
if token == "+":
stack.push(a + b)
elif token == "-":
stack.push(a - b)
elif token == "*":
stack.push(a * b)
elif token == "/":
stack.push(int(a / b))
else:
stack.push(int(token))
return stack.pop()
print(eval_rpn(["2", "1", "+", "3", "*"])) # 9
print(eval_rpn(["4", "13", "5", "/", "+"])) # 6
print(eval_rpn(["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"])) # 22
输出结果:
9
6
22
总结
本文介绍了Python实现栈的完整攻略,包括栈的基本概念、Python实现代码和两个示例说明。栈是一种常用的数据结构,适用于许多算法和应用场景,如括号匹配、逆波兰表达式求值等。在实际应用中,需要注意栈的空间复杂度和时间复杂度,以及栈的应用场景和算法实现。