用后缀表达式计算四则运算算法

来源:互联网 发布:java jdk官网下载 编辑:程序博客网 时间:2024/06/03 09:34

1*2+3*4, 这个对应的中缀表达式就是[1,*,2,+,3,*,4], 需要转换成后缀表达式[1,2,*,3,4,*,+], 才能进一步计算得到结果.

1.得到后缀表达式

需要准备两个容器, 符号栈 operatorStack 与 盛放后缀表达式的队列 expQueue.
按照下列规则从前到后遍历中缀表达式.

  1. 遇到数字num, 就expQueue.push(num);
  2. 若遇到操作符, 分两步处理
    2.1 在符号栈operatorStack 中弹出若干个操作符op, 直至遇到优先级更低的操作符, 做expQueue.push(op)操作.
    2.2 将当前运算符op放入栈中, operatorStack.push(op)

2.计算后缀表达式

需要用到上面得到的后缀表达式expQueue, 还需要一个保存计算结果的数字栈 numStack.
按照下列规则从前到后遍历后缀表达式.

  1. 遇到数字num, numStack.push(num);
  2. 若遇到操作符op, 从numStack取出栈尾两个数字,b=numStack.pop(),a=numStack.pop() 得到c=a op b, numStack.push(c).

不断进行上述操作, 最后只剩一个数字, 就是答案.

3. 例题

见: 四则运算-jobdu-1101 .

0 0
原创粉丝点击