“表达式”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
第110行: 第110行:
 
|}
 
|}
 
stack(5)
 
stack(5)
 +
{| class="wikitable"
 +
|
 +
|-
 +
|5
 +
|-
 +
|c
 +
|-
 +
|x
 +
|}
 +
stack(6)
 +
 +
遇到5压入栈内
 +
{| class="wikitable"
 +
|+
 +
|
 +
|-
 +
|
 +
|-
 +
|
 +
|-
 +
|x
 +
|}
 +
stack(7)
 +
 +
遇到+,先取出5,再取出c,把先取出来的放到后面,把后取出来的放到前面,计算c+5得到结果y,压入栈内
 +
{| class="wikitable"
 +
|+
 +
|
 +
|-
 +
|
 +
|-
 +
|y
 +
|-
 +
|x
 +
|}
 +
stack(8)
 +
{| class="wikitable"
 +
|+
 +
|
 +
|-
 +
|
 +
|-
 +
|
 +
|-
 +
|
 +
|}
 +
stack(9)
 +
 +
遇到*,先取出y,再取出x,把先取出来的放到后面,把后取出来的放到前面,计算x*y得到最终结果

2022年9月14日 (三) 10:08的版本

https://www.bilibili.com/video/BV1hg411V7Bm?p=46

表达式的类型及转换规则

前缀表达式(+ab) 把符号提到运算对象的前面

中缀表达式(a+b) 常见的,将符号放在运算对象的中间

后缀表达式(ab+) 把运算符号提到运算对象的后面,后缀表达式也叫逆波兰式

区别就是运算符号放在运算对象哪一边



可以分别转换成二叉树

生成缩略图出错:无法将缩略图保存到目标地点

的三种不同遍历方式:前序遍历、中序遍历和后序遍历

如果用前序遍历得到的就是前缀表达式,如果用中序遍历得到的就是中序表达式,如果用后序遍历得到的就是后序表达式


1)将中缀表达式(a-b)*(c+5)转为后缀表达式

(a-b)*(c+5) 改.png

ab-

ab- c5+

ab- c5+ *

所以答案是:ab- c5+ *


将中缀表达式a-b*c+5转为后缀表达式

bc*

abc*-

abc*-5+

所以答案是:abc*-5+


2)后缀表达式的运算过程

其实就是把后缀表达式转换为中缀表达式的具体计算过程

规则:运算对象放栈内,运算符号取2个元素进行计算

ab-c5+*

 
 
 
a

stack(1)

遇到a放到栈内

 
 
b
a

stack(2)

遇到b放到栈内

stack(3)

遇到-,先取出b,再取出a,把先取出来的放到后面,把后取出来的放到前面,计算a-b得到结果x,压入栈内

x

stack(4)

遇到c压入栈内

c
x

stack(5)

5
c
x

stack(6)

遇到5压入栈内

x

stack(7)

遇到+,先取出5,再取出c,把先取出来的放到后面,把后取出来的放到前面,计算c+5得到结果y,压入栈内

y
x

stack(8)

stack(9)

遇到*,先取出y,再取出x,把先取出来的放到后面,把后取出来的放到前面,计算x*y得到最终结果