中缀表达式转换为后缀表达式

从头到尾读取中缀表达式的每个对象,对不同对象按不同的情况处理。

  • 运算数:直接输出;
  • 左括号:压入栈;
  • 右括号:将栈顶的运算符弹出并输出,直到遇到左括号(出栈,不输出);
  • 运算符:
  1. 若优先级大于栈顶运算符时,则把它压栈;
  2. 若优先级小于等于栈顶运算符时,将栈顶运算符弹出并输出;再比较新的栈顶运算符,直到该运算符大于栈顶运算符优先级为止,然后将该运算符压栈。
  • 若各对象处理完毕,则把堆栈中存留的运算符一并输出。

中缀转换为后缀示例:(2*(9+6/3-5)+4)

步骤 待处理表达式

堆栈状态

(底<-->顶)

输出状态
1 2*(9+6/3-5)+4    
2 *(9+6/3-5)+4   2
3 (9+6/3-5)+4
*
2
4 9+6/3-5)+4 *( 2
5 +6/3-5)+4 *( 29
6 6/3-5)+4 *(+ 29
7 /3-5)+4 *(+ 296
8 3-5)+4 *(+/ 296
9 -5)+4 *(+/ 2963
10 5)+4 *(- 2963/+
11 )+4 *(- 2963/+5
12 +4 * 2963/+5-
13 4 + 2963/+5-*
14   + 2963/+5-*4
15     2963/+5-*4+
原文地址:https://www.cnblogs.com/cynthia-dcg/p/6737622.html