后缀(逆波兰)表示法定义:全部的符号都是在要运算数字的后面出现。spa
中缀表达式:a+b*c+(d*e+f)/g遍历
后缀表达式:abc*+de*f+g/+di
示例:2+3*2+(2*3+4)/2 = 13数字
232*+23*4+2/+ = 13运算符
后缀表达式的运算:ab
1.扫描后缀表达式:
①若是是数字,则让其进栈
②若为操做符,则从栈中取出两个操做数,先取出的做为右操做数,后取出的做为左操做数,而后进行该操做符的运算,并使其结果入栈。
③重复上述过程,直至表达式扫描完成。
2.最终栈中只留一个元素—–>即就是结果。
中缀表达式转化成后缀表达式:
1.遇到操做数,直接输出;
2.栈为空时,遇到运算符,入栈;
3.遇到左括号,将其入栈;
4.遇到右括号,执行出栈操做,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出;
5.遇到其余运算符“+”、“-”、“*”、“÷”时,弹出全部优先级大于或等于该运算符的栈顶元素,而后将该运算符入栈;
6.最终将栈中的元素依次出栈,输出。
示例:
例如将 9 + (3 - 1) X 3 + 10 / 2 转换成后缀表达式,过程以下: 一、9是数字,输出,表达式为:9; 二、“ + ”进栈,“ ( ”进栈,栈内容为:+ (; 三、数字3输出,表达式为:9 3; 四、“ - ”进栈,栈内容为:+ ( -; 五、数字1输出,表达式为:9 3 1; 六、遇到“ ) ”,根据规则,栈中符号出栈直到“ ( ”出栈为止,此间遇到“ - ”须要输出,所以表达式为:9 3 1 -,栈中内容为:+; 七、遇到“ X ”,因为它的优先级比栈顶元素“ + ”高,所以它进栈,栈中内容为:+ X; 八、遇到数字3输出,表达式为:9 3 1 - 3; 九、以后是“ + ”,优先级比栈顶的“ X ”低,“ X ”出栈输出,“ + ”变成栈顶,栈顶的“ + ”优先级并不大于外面的“ + ”,所以也须要出栈输出,此时栈为空了,那么表达式为:9 3 1 - 3 X +,同时外面的“ + ”进栈,栈中内容为:+; 十、遇到10输出,表达式为:9 3 1 - 3 X + 10; 十一、遇到符号“ / ”,优先级比栈顶元素“ + ”高,进栈,栈中内容为:+ /; 十二、数字2输出,表达式为:9 3 1 - 3 X + 10 2; 1三、遍历结束,栈不为空,栈中符号依次出栈输出,最后表达式为:9 3 1 - 3 X + 10 2 / +。