运算级的优先级:+ - 的优先级相同,* / 的优先级相同,而* / 的优先级高于 + -。
前缀表达式:
①定义:运算符在操作数的前面。例如:+ 1 * 3 6 。
中缀表达式:
①定义:运算符位于两个操作数之间的表达式。例如1+2*3,1*6-4。
②运算:先乘除后加减,从左到右计算,先计算括号内,后括号外
需要依赖运算符的优先级,也需要处理括号。
后缀表达式(逆波兰表达式):
①定义:算数表达式中运算符在操作数的后面。例如1 2*-,3 9 5 + / 。
②运算:此时已经考虑了运算符的优先级,没有括号,只有操作数和运算符,同时越放在前面的 运算符越优先执行。
③优点:将复杂表达式转换为可以依靠简单的操作得到计算的结果的表达式。
例题:a+((b*c-d)/e+f*g/h)+i/j,求它的后缀表达式。
解:先把a放在postexp中,然后+入栈,(①入栈,(②入栈,b放在postexp中,*入栈,c放在postexp中。-的优先级低于*,所以*退出来,放入postexp中,-入栈,d放在postexp中,遇到①)退出-。/入栈,e放在postexp中,+入栈,f放在postexp中,*优先级高于+,直接入栈,g放在postexp中,/入栈,h放在postexp中,遇到②),退出②中所有运算符,+入栈,i放在postexp,/入栈,j放在postexp中,完毕,退栈。
答案为abc*d-e/fgh/*+ij/++