栈的应用-四则运算表达式

后缀(逆波兰)表示法定义:全部的符号都是在要运算数字的后面出现。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 / +。
相关文章
相关标签/搜索