栈的应用:后缀表达式与中缀表达式

无人久伴 提交于 2020-04-06 15:14:05

一个数学的运算式子说明两者区别

中缀表达式:4.99 * 1.06 + 5.99 + 6.99 * 1.06。

后缀表达式:4.99 1.06 * 5.99 + 6.99 1.06 * +

这里的后、中是通过运算符在数字的位置。中:在数字之间;后:在两个数字之后。

中缀转后缀:

两个栈。一个存结果为A,一个存运算符为B。一直读取表示式。运算符通过优先级高低比大小。步骤A:

  1. 遇到数字直接压入A栈

  2. 遇到运算符c。栈B空则把c压入;否则,B弹栈得到d,与c计较

  • 若 d >= c:d 入栈A,c 入栈B
  • 若 d < c : d 入栈B,c入栈B
  1. 读取完毕,把栈B全部弹出,压入A

后缀表达式进行运算

把步骤A修改一下:

  1. 遇到数字直接压入A栈

  2. 遇到运算符c。栈B空则把c压入;否则,B弹栈得到d,与c计较

  • 若 d >= c:c 入栈B;A两次弹出得到数字与d运算,得到结果压入A
  • 若 d < c : d 入栈B,c入栈B

存在括号情况的中缀转后缀

还是两个栈A与B。优先级为( > * > +

有如下式子:a + b * c + (d * e + f) * g

转换后:abc * + de * f + g * +

  1. 遇到数字压入栈A。

  2. 遇到右括号),B弹出元素,直到遇到左括号)

  3. 遇到(*+任何一个运算符a。B弹出元素b,如果b>=a,就一直弹出压入A;直到遇到优先级低于a的为止,把低于a的b压回B,再把a压入B

  4. 最后到末尾把B全部弹出,压入A

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!