逆波兰式的生成

来源:互联网 发布:淘宝助理无数据 编辑:程序博客网 时间:2024/05/16 06:11

              读入     后缀串          符号栈
11+2*5        NULL      NULL             NULL
第一步:      "11"      11               NULL
第二步:       "+"       11               +        (入栈)
第三步:       "2"       11 2             +
第四步:       "*"       11 2             +  *    (*比+优先级高, 入栈)
第五步:       "5"       11 2 5           +  *
第六步:       "/0"      11 2 5 * +              (操作符依次出栈)

 

 

得到后缀串: 11 2 5 * +
后缀表示不用考虑运算优先级, 也不存在括号(括号的中缀转后缀时已经按优先级顺序去掉了)
可以直接计算
1. 数字进数字栈
2. 遇到运算符数字出栈,结果入数字栈 
3. 直到后缀串结束

11 2 5 * +       读入       数字栈
第一步           "11"          11 (11入栈)
第二步          "2"             11 2 (2入栈)
第三步         "5"               11 2 5 (5入栈)
第四步          "*"              11 2 (5出栈)
                                           11 (2 出栈)
                                           计算5*2=10
                                           11 10 (10入栈)
第五步          "+"               11 (10出栈)
                                            NULL (11出栈)
                                            计算 10 + 11 =21
                                            21 (21入栈)
第六步          "/0"              21 (栈顶元素21就是最后结果)