栈的应用:后缀表达式与中缀表达式
一个数学的运算式子说明两者区别 中缀表达式:4.99 * 1.06 + 5.99 + 6.99 * 1.06。 后缀表达式:4.99 1.06 * 5.99 + 6.99 1.06 * + 这里的后、中是通过运算符在数字的位置。中:在数字之间;后:在两个数字之后。 中缀转后缀: 两个栈。一个存结果为A,一个存运算符为B。一直读取表示式。运算符通过优先级高低比大小。步骤A: 遇到数字直接压入A栈 遇到运算符c。栈B空则把c压入;否则,B弹栈得到d,与c计较 若 d >= c:d 入栈A,c 入栈B 若 d < c : d 入栈B,c入栈B 读取完毕,把栈B全部弹出,压入A 后缀表达式进行运算 把步骤A修改一下: 遇到数字直接压入A栈 遇到运算符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 * + 遇到数字压入栈A。 遇到右括号 ) ,B弹出元素,直到遇到左括号 ) 遇到 ( 、 * 、 + 任何一个运算符a。B弹出元素b,如果b>=a,就一直弹出压入A