假设我们欲将中缀表达式
a + b * c + ( d * e + f ) * g
转换成后缀表达式 。正确的答案是
a b c * + d e * f + g * +
算法总的来说可以分为4步:
①当读到字母时,我们直接输出,当读到运算符时,我们将运算符推入栈。(当是空栈的时候)
②当读到右括号”)“,我们就将栈中的元素弹出并输出,直到我们遇到对应的左括号,但是这个左括号只被弹出,并不输出。
③当栈中有元素的时候,如果我们又遇到了运算符{ ” + “ , ” - “ ” x “ ” / “ " ( " },那么我们从栈中弹出元素并输出, 直到我们发现优先级更低的元素为止。 这里有一个例外,除非遇到 右括号“)”,否则我们绝不将 左括 号”(“弹出。
对于这个操作, ” +“ ” - “ 的优先级最低, ” x “ ” / “其次, ”(“的优先级最高 。 当我们从栈中弹出元素的任务完成的时候,我们再将遇到的运算符压入栈中。
④最后,如果我们读到输入的末尾,我们将栈中的元素依次弹出直到变为空栈,并依次输出栈中的元素。
————————————————
版权声明:本文为优快云博主「WinJourn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/chaiwenjun000/article/details/48713721