解析Python中的入栈和出栈操作,包括示例代码。
一、栈的概念
栈是一种遵循后进先出(LIFO)原则的一组元素的集合,即最后进入的元素最先被取出。栈可以简单地实现为一个容器,可以在末尾进行插入和删除操作。栈的插入操作被称为入栈(push),删除操作被称为出栈(pop)。
二、Python中的栈实现
Python使用list列表作为栈的底层实现方式。list作为一种动态数组,可以方便地进行插入和删除操作。通过将元素添加到list的末尾实现入栈操作,将末尾元素删除即可实现出栈操作。
stack = [] #创建一个空栈
#入栈
stack.append("apple")
stack.append("orange")
stack.append("banana")
#出栈
stack.pop()
三、使用栈解决问题
栈可以用于许多应用问题的解决,如括号匹配、表达式求值等。
1. 括号匹配
括号匹配是指对于给定的一个字符串,判断其中的括号是否匹配。例如”()[]{}”和”[{()}]”是匹配的,而”([)]”则不匹配。
使用栈可以解决该问题,遍历字符串中的每一个字符,如果遇到左括号即入栈,如果遇到右括号即出栈并判断是否与栈顶元素匹配。
def match_parentheses(s: str) -> bool:
stack = []
mapping = {")": "(", "}": "{", "]": "["}
for c in s:
if c in mapping:
#遇到右括号,出栈并判断与栈顶元素是否匹配
top_element = stack.pop() if stack else "#"
if mapping[c] != top_element:
return False
else:
#遇到左括号,入栈
stack.append(c)
#栈为空则所有括号都匹配了
return not stack
2. 表达式求值
使用栈可以解决表达式求值问题。遍历表达式,遇到数字直接入栈,遇到运算符则弹出栈顶两个元素进行运算,并将结果入栈。最后剩下的栈顶元素即为表达式的结果。
def eval_expression(s: str) -> int:
stack = []
operand = 0
result = 0
sign = 1
for c in s:
if c.isdigit():
operand = operand * 10 + int(c)
elif c == '+':
#将算式结果累加到最后的结果中
result += sign * operand
#重置操作数和正负号
operand = 0
sign = 1
elif c == '-':
#将算式结果累加到最后的结果中
result += sign * operand
#重置操作数和正负号
operand = 0
sign = -1
elif c == '(':
#入栈当前的算式结果和正负号
stack.append(result)
stack.append(sign)
#重置结果和正负号
result = 0
sign = 1
elif c == ')':
#将栈顶的正负号和算式结果结合起来
result += sign * operand
operand = 0
pre_sign = stack.pop()
pre_operand = stack.pop()
result = pre_operand + pre_sign * result
#最后的算式结果
return result + sign * operand
四、总结
Python中使用list实现栈结构,方便进行入栈出栈操作。栈可以实现许多常见问题的解决,如括号匹配、表达式求值等。希望今天的内容让您更好地理解Python的栈操作。感谢阅读!
原创文章,作者:YRTFD,如若转载,请注明出处:https://www.506064.com/n/373901.html
微信扫一扫
支付宝扫一扫