先记下来网上参考的思路,有空再去实现,不过有了思路应该要编代码也不难。

举例:

中缀表达式:(1+2)*5-6

后缀表达式:1 2 + 5 * 6 -


步骤:

1.初始化:运算符栈S1和中间结果栈S2

2.从左往右开始扫描中缀表达式

3.遇到操作数,压入S2

4.遇到运算符,比较它和S1栈顶运算符的优先级

4-1.如果S1为空,或者栈顶运算符为"(",或者它的优先级比栈顶运算符高,直接压人S1

4-2.否则,将S1栈顶运算符弹出并压入S2中,回到4-1继续判断

5.遇到"("和")"时

5-1.如果是"(",直接压入S1

5-2.如果是")",依次弹出S1栈顶的运算符,并压入S2,直到遇到"("为止,弹出"("和")"

6.重复步骤2-5,直到表达式的最右边

7.将S1中剩余的运算符依次弹出压入S2

8.依次弹出S2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式


网上转来的图~~~觉得按这个的解析就挺好的了~~~

095355159.jpg