后缀算术表达式

核 心 : \color{red}{核心:}

以 栈 结 构 为 基 , 根 据 运 算 符 的 优 先 级 来 决 定 什 么 什 么 出 栈 \color{red}{以栈结构为基,根据运算符的优先级来决定什么什么出栈}

举例:A+(B*C-D)+E

  1. A
    读A【栈空】

  2. A
    +号入栈【+】

  3. A
    左括号入栈【+ ( 】

  4. AB
    读B 无符号入栈【+( 】

  5. AB
    乘号入栈【+( *】

  6. ABC
    读C 无符号入栈【+( *】

  7. ABC *
    减号,不 比 栈 顶 的 符 号 ( ∗ ) 优 先 级 高 \color{red}{不比栈顶的符号(*)优先级高},则把栈顶元素出栈
    循 环 进 行 \color{red}{循环进行},直到无法出栈时,减号入栈【+( -】

  8. ABC*D
    读D 无符号入栈【+( -】

  9. ABC*D
    右括号会与左括号匹配,这时需要出栈

  10. ABC*D-
    减号出栈【+( 】

  11. ABCD -
    左括号出栈【+】(左括号不用写在中缀表达式中)

  12. ABC*D - +
    中缀表达式的加号,不比栈顶的符号优先级高,则加号出栈【栈空】

  13. ABC*D - +
    直到出完栈为止(出栈之后会有新的栈顶,继续比较,如果满足条件则继续出栈,周而复始)
    然后中缀表达式的加号入栈【+】

  14. ABC*D - + E
    读E 无符号入栈【+】

  15. ABC * D - + E+
    中缀表达式结束,把剩余元素出栈【栈空】

故 ABC * D - + E+ 为最终答案


版权声明:本文为a10201516595原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。