网站首页 > 技术文章 正文
表达式转换是栈的重要应用之一,尤其在处理算术表达式时非常有用。常见的转换包括:
- 中缀表达式转后缀表达式(逆波兰表达式)
- 中缀表达式转前缀表达式
下面以中缀转后缀为例说明:
中缀表达式
- 运算符在操作数之间,例如:A + B * C
后缀表达式
- 运算符在操作数之后,例如:A B C * +
转换规则
使用栈结构进行中缀表达式到后缀表达式的转换时,遵循以下步骤:
1.初始化
- 创建一个空栈用于存放运算符。
- 遍历中缀表达式的每个字符。
2.遇到操作数
直接将操作数加入到输出(后缀表达式)。
3.遇到左括号 (
将左括号直接入栈。
4.遇到右括号 )
- 弹出栈顶元素并加入输出,直到遇到左括号。
- 弹出左括号(不加入输出)。
5.遇到运算符
- 如果栈为空,或者栈顶为左括号 (,直接将运算符入栈。
- 否则比较当前运算符和栈顶运算符的优先级:若当前运算符的优先级高于栈顶运算符,入栈。若当前运算符的优先级小于或等于栈顶运算符,弹出栈顶运算符并加入输出,重复比较直到可以将当前运算符入栈。
6.表达式遍历结束后
将栈中剩余的所有运算符依次弹出并加入输出。
优先级定义
- 括号:( 和 ) 的优先级最高。
- 乘除:* 和 / 优先级高于加减。
- 加减:+ 和 - 优先级最低。
实例:A + B * C + D
1. 中缀表达式:
A + B * C + D
2. 转换过程:
遇到的字符 | 栈(运算符) | 输出(后缀表达式) |
A | A | |
+ | + | A |
B | + | A B |
* | + * | A B |
C | + * | A B C |
+ | + | A B C * + |
D | + | A B C * + D |
3. 栈清空:
A B C * + D +
完整算法的代码实现(Python)
def infix_to_postfix(expression):
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0}
stack = []
postfix = []
for char in expression:
if char.isalnum(): # 操作数
postfix.append(char)
elif char == '(':
stack.append(char)
elif char == ')':
while stack and stack[-1] != '(':
postfix.append(stack.pop())
stack.pop() # 弹出左括号
else: # 运算符
while stack and precedence[stack[-1]] >= precedence[char]:
postfix.append(stack.pop())
stack.append(char)
while stack: # 清空栈
postfix.append(stack.pop())
return ''.join(postfix)
# 示例
expression = "A+B*C+D"
print(infix_to_postfix(expression)) # 输出: "ABC*+D+"
每天坚持学习一点点,不求有回报,只愿可以丰富自己!!!
猜你喜欢
- 2024-12-19 数据结构与算法——链式栈的相关操作
- 2024-12-19 Python包管理器的未来,Rust实现!
- 2024-12-19 深入解析 Python 断点调试:用好工具,高效定位问题!
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)