我们平常所写的标准形式的表达式叫做中缀式,我们可以用栈来把他转换成后缀式。假设只允许操作+,*,(,),并坚持普通的优先级发则。还要假设表达式是合法的。
如将表达式 a + b * c + ( d * e + f ) * g转换成后缀式是a b c * + d e * f + g * +
思路 :当读到一个操作数时,立即把他放到输出中。而把操作符放进一个栈中。当遇到左括号时我们也要将其推入栈中。
从一个空栈开始计算。如果遇到一个右括号,那么就将栈元素弹出,将弹出的元素写出直到遇到对应的左括号,但是这个左括号不输出但是要弹出,相应的,如果我们遇到任何其他的操作符,就先从栈中弹出操作符知道发现优先级更低的为止,然后再将操作符入栈。除非是在处理一个“)”时,否则绝不从栈中弹出“(”。
最后,如果读到输入的末尾,就将栈元素全部弹出写到输出中。
如将表达式 a + b * c + ( d * e + f ) * g转换成后缀式是a b c * + d e * f + g * +
思路 :当读到一个操作数时,立即把他放到输出中。而把操作符放进一个栈中。当遇到左括号时我们也要将其推入栈中。
从一个空栈开始计算。如果遇到一个右括号,那么就将栈元素弹出,将弹出的元素写出直到遇到对应的左括号,但是这个左括号不输出但是要弹出,相应的,如果我们遇到任何其他的操作符,就先从栈中弹出操作符知道发现优先级更低的为止,然后再将操作符入栈。除非是在处理一个“)”时,否则绝不从栈中弹出“(”。
最后,如果读到输入的末尾,就将栈元素全部弹出写到输出中。