前中后缀表达式互换
2026-03-21 13:42:27
发布于:广东
括号法(万能方法)
核心思想: 先给每个运算加上括号,再把运算符挪到括号外面。
一、中缀 → 后缀(括号挪后法)
步骤:
- 给每个运算加上括号,明确运算顺序
- 把每个运算符挪到它所在括号的后面
- 去掉所有括号
例子:(3 + 4) × 5 - 6
第1步:加括号
((3 + 4) × 5) - 6
还要给最后一步减号加括号:
(((3 + 4) × 5) - 6)
现在整个式子就一个括号套一个括号,每个括号里只有一个运算符。
第2步:挪运算符到括号后面
- 最里面
(3 + 4)→ 变成(3 4 +) - 中间
( (3 4 +) × 5 )→ 变成(3 4 + 5 ×) - 最外面
( (3 4 + 5 ×) - 6 )→ 变成(3 4 + 5 × 6 -)
第3步:去掉所有括号
3 4 + 5 × 6 -
完成!
另一个例子:8 - 3 + 2(注意:同级运算从左到右)
第1步:加括号
((8 - 3) + 2)
第2步:挪运算符到后面
- 先
(8 - 3)→(8 3 -) - 再
((8 3 -) + 2)→(8 3 - 2 +)
第3步:去括号
8 3 - 2 +
注意:如果写成
8 - (3 + 2)结果不一样,所以括号很重要!
二、中缀 → 前缀(括号挪前法)
步骤:
- 给每个运算加上括号
- 把每个运算符挪到它所在括号的前面
- 去掉所有括号
例子:(3 + 4) × 5 - 6
第1步:加括号
(((3 + 4) × 5) - 6)
第2步:挪运算符到括号前面
- 最里面
(3 + 4)→ 变成(+ 3 4) - 中间
( (+ 3 4) × 5 )→ 变成(× + 3 4 5) - 最外面
( (× + 3 4 5) - 6 )→ 变成(- × + 3 4 5 6)
第3步:去掉括号
- × + 3 4 5 6
完成!
例子:8 - 3 + 2
第1步:加括号
((8 - 3) + 2)
第2步:挪运算符到前面
(8 - 3)→(- 8 3)((- 8 3) + 2)→(+ - 8 3 2)
第3步:去括号
+ - 8 3 2
三、括号法为什么好用?
- 不用管优先级——括号已经帮你定好顺序了
- 不用管结合性——括号让每一步都很清楚
- 机械操作——就像做填空题,不容易错
四、完整示例对比
| 中缀 | 加括号 | 后缀(挪后) | 前缀(挪前) |
|---|---|---|---|
3 + 4 × 2 |
(3 + (4 × 2)) |
3 4 2 × + |
+ 3 × 4 2 |
(3 + 4) × 2 |
((3 + 4) × 2) |
3 4 + 2 × |
× + 3 4 2 |
10 - 2 × 3 |
(10 - (2 × 3)) |
10 2 3 × - |
- 10 × 2 3 |
10 ÷ 2 + 3 |
((10 ÷ 2) + 3) |
10 2 ÷ 3 + |
+ ÷ 10 2 3 |
五、小练习(试试看)
用括号法把 15 ÷ (3 + 2) × 4 转成后缀和前缀。
加括号: (((15 ÷ (3 + 2)) × 4)
后缀: 15 3 2 + ÷ 4 ×
前缀: × ÷ 15 + 3 2 4
总结一句话:
先给式子加满括号,然后让运算符“搬家”——搬到括号后面是后缀,搬到括号前面是前缀,最后把括号擦掉就完事!
一、后缀 → 中缀
规则
- 从左往右扫描
- 遇到数字:压入栈
- 遇到运算符:弹出栈顶两个元素,后弹出的是左操作数,先弹出的是右操作数,组合成
(左 运算符 右),压回栈 - 扫描结束,栈顶即为结果
例子:3 4 2 × + 5 -
| 步骤 | 读入 | 栈(栈顶在右) | 操作 |
|---|---|---|---|
| 1 | 3 | [3] |
数字,压栈 |
| 2 | 4 | [3, 4] |
数字,压栈 |
| 3 | 2 | [3, 4, 2] |
数字,压栈 |
| 4 | × | [3, (4×2)] |
弹出2(右)、4(左) → (4×2) |
| 5 | + | [(3+(4×2))] |
弹出(4×2)(右)、3(左) → (3+(4×2)) |
| 6 | 5 | [(3+(4×2)), 5] |
数字,压栈 |
| 7 | - | [((3+(4×2))-5)] |
弹出5(右)、(3+(4×2))(左) → ((3+4×2)-5) |
结果: 3 + 4 × 2 - 5
二、前缀 → 中缀
规则
- 从右往左扫描
- 遇到数字:压入栈
- 遇到运算符:弹出栈顶两个元素,先弹出的是左操作数,后弹出的是右操作数,组合成
(左 运算符 右),压回栈 - 扫描结束,栈顶即为结果
例子:- + 3 × 4 2 5
从右往左扫描顺序:5 2 4 × 3 + -
| 步骤 | 读入 | 栈(栈顶在右) | 操作 |
|---|---|---|---|
| 1 | 5 | [5] |
数字,压栈 |
| 2 | 2 | [5, 2] |
数字,压栈 |
| 3 | 4 | [5, 2, 4] |
数字,压栈 |
| 4 | × | [5, (4×2)] |
弹出4(左)、2(右) → (4×2) |
| 5 | 3 | [5, (4×2), 3] |
数字,压栈 |
| 6 | + | [5, (3+(4×2))] |
弹出3(左)、(4×2)(右) → (3+4×2) |
| 7 | - | [((3+4×2)-5)] |
弹出(3+4×2)(左)、5(右) → ((3+4×2)-5) |
结果: 3 + 4 × 2 - 5
三、规则对比
| 转换方向 | 扫描方向 | 弹出顺序(左操作数、右操作数) |
|---|---|---|
| 后缀 → 中缀 | 从左往右 | 后弹出 = 左,先弹出 = 右 |
| 前缀 → 中缀 | 从右往左 | 先弹出 = 左,后弹出 = 右 |
核心区别: 扫描方向不同,弹出后谁当左谁当右的规则也不同,但最终组合方式都是 (左 符 右)。
前中后缀的应用
一、中缀表达式——人脑友好
我们平时写的算式,比如 3 + 4 × 2 - 5
优点:
- 符合人类阅读习惯
- 有括号、有优先级,一看就懂
缺点:
- 计算机处理麻烦(要考虑优先级、括号、结合性)
- 需要写复杂的解析程序
应用场景:
- 我们平时写的数学公式
- Excel 里的公式,比如
=A1+B2*C3 - 计算器上直接输入的算式
二、后缀表达式——计算机友好
也叫逆波兰表达式,比如 3 4 2 × + 5 -
优点:
- 不需要括号,没有优先级问题
- 计算简单:从左往右,遇到运算符就算,用栈轻松搞定
- 计算机处理特别快
缺点:
- 人类读起来费劲
应用场景:
1. 计算机计算器
很多计算器内部先把中缀转成后缀,再用栈计算。比如你按 3 + 4 × 2,计算器偷偷转成 3 4 2 × + 再算。
2. 编程语言编译
Java、Python 等语言在编译数学表达式时,会先转成后缀形式,方便生成机器码。
3. 栈的经典教学
学数据结构时,后缀表达式是栈的经典应用案例。
三、前缀表达式——LISP语言友好
也叫波兰表达式,比如 - + 3 × 4 2 5
优点:
- 不需要括号
- 函数式编程语言喜欢用
缺点:
- 人类读起来最费劲
应用场景:
1. LISP 系列编程语言
LISP、Scheme、Clojure 等语言直接用前缀表达式。比如:
(+ 3 (* 4 2) 5) ; 相当于 3 + 4×2 + 5
2. 人工智能早期语言
LISP 是 AI 领域早期的重要语言,前缀表达式就是它的语法核心。
四、实际计算流程
计算机处理一个算式时,典型流程是:
中缀表达式(你写的)
↓
转成后缀表达式(方便计算)
↓
用栈计算结果(得到答案)
举例: 你输入 (3+4)×5-6
- 编译器转成后缀:
3 4 + 5 × 6 - - 计算机用栈计算:
- 3、4 入栈
- 遇到 +,弹出 4 和 3,算 3+4=7,入栈
- 5 入栈
- 遇到 ×,弹出 5 和 7,算 7×5=35,入栈
- 6 入栈
- 遇到 -,弹出 6 和 35,算 35-6=29
- 输出 29
五、总结对比
| 类型 | 谁喜欢用 | 特点 | 实际应用 |
|---|---|---|---|
| 中缀 | 人类 | 有优先级、括号,直观 | 日常算式、Excel |
| 后缀 | 计算机 | 无括号,栈计算快 | 计算器内部、编译器 |
| 前缀 | 函数式编程 | 无括号,函数风格 | LISP、AI语言 |
六、趣味小知识
- 逆波兰表达式的名字来源于波兰数学家扬·武卡谢维奇(前缀表达式是他发明的,逆波兰是后来改进的)
- 老式惠普计算器用的就是后缀表达式,输入
3 Enter 4 Enter 2 × +这样 - 后缀表达式不需要括号,所以计算时永远不用担心优先级问题
一句话总结:
- 人类写中缀(方便看)
- 计算机算后缀(方便算)
- 函数式编程用前缀(方便写代码)
全部评论 2
张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!张kk牛逼!
昨天 来自 广东
2豆包的行文风格?
昨天 来自 广东
0





















有帮助,赞一个