核 心 : \color{red}{核心:} 核心:
以 栈 结 构 为 基 , 根 据 运 算 符 的 优 先 级 来 决 定 什 么 什 么 出 栈 \color{red}{以栈结构为基,根据运算符的优先级来决定什么什么出栈} 以栈结构为基,根据运算符的优先级来决定什么什么出栈
举例:A+(B*C-D)+E
-
A
读A【栈空】 -
A
+号入栈【+】 -
A
左括号入栈【+ ( 】 -
AB
读B 无符号入栈【+( 】 -
AB
乘号入栈【+( *】 -
ABC
读C 无符号入栈【+( *】 -
ABC *
减号, 不 比 栈 顶 的 符 号 ( ∗ ) 优 先 级 高 \color{red}{不比栈顶的符号(*)优先级高} 不比栈顶的符号(∗)优先级高,则把栈顶元素出栈
循 环 进 行 \color{red}{循环进行} 循环进行,直到无法出栈时,减号入栈【+( -】 -
ABC*D
读D 无符号入栈【+( -】 -
ABC*D
右括号会与左括号匹配,这时需要出栈 -
ABC*D-
减号出栈【+( 】 -
ABCD -
左括号出栈【+】(左括号不用写在中缀表达式中) -
ABC*D - +
中缀表达式的加号,不比栈顶的符号优先级高,则加号出栈【栈空】 -
ABC*D - +
直到出完栈为止(出栈之后会有新的栈顶,继续比较,如果满足条件则继续出栈,周而复始)
然后中缀表达式的加号入栈【+】 -
ABC*D - + E
读E 无符号入栈【+】 -
ABC * D - + E+
中缀表达式结束,把剩余元素出栈【栈空】
故 ABC * D - + E+ 为最终答案