中缀表达式转后缀表达式
-
问题
- 我们可以看到,后缀表达式适合计算式进行运算,但是人却不太容易写出来,尤其是表达式很长的情况下,因此在开发中,我们需要将中缀表达式转成后缀表达式。
-
中缀表达式转后缀表达式思路分析
小括号并不是运算符
这思路是由相关计算机领域专家提供的,自己设计一套有相同效果的算法,是一件较为复杂的事,相关领域老师也不定能想出来
个人认为,算法分为两个境界,第一个境界,理解算法并灵活应用算法。第二个境界,设计算法并应用此算法
-
初始化两个栈:运算符栈s1和运算符栈s2
-
从左至右扫描中缀表达式
-
遇到操作数时,将其压s2
-
遇到运算符时,比较其与s1栈顶运算符的优先级
- 如果s1为空,或栈顶运算符为左括号"(”,则直接将此运算符入栈。
- 否则,若优先级比栈顶运算符高,也将其运算符压入s1
- 否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4,1)与s1中新的栈顶运算符相比较;
-
遇到括号时
- 如果是左括号“(”,则将其直接压入s1;
- 如果是右括号“)”,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃。
- 重复步骤2至5,知道表达式的最右边。
- 将s1中剩余的运算符依次弹出并压入s2
- 依次弹出s2中的元素并输出,结果逆序即为中缀表达式对应的后缀表达式。
-
推演过程
-