一、需求分析
1、输入一个逆波兰表达式,利用栈计算其结果;
2、支持小括号和多位数整数;
二、思路分析
例如:(3+5)*5-6对应的后缀表达式为3 5 + 5 * 6 -,其求值步骤如下:
1.从左到右扫描,遇见数字直接入栈,3和5入栈;
2.遇见操作符+,从栈中弹出两个数3和5,根据操作符计算结果为8,并将结果8入栈;
3.将5入栈;
4.遇见操作符*,弹出两个操作符5和8,计算结果为5*8=40,将40入栈;
5.将6入栈;
6.遇见操作符-,弹出两个数字6和40,计算结果为40-6=34,将34入栈;
7.字符串扫描完毕,栈中剩余数字34就是最终答案。
三、代码
package com.stack;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
* 例如:(3+5)\*5-6对应的后缀表达式为3 5 + 5 \* 6 -,其求值步骤如下:
* 1.从左到右扫描,遇见数字直接入栈,3和5入栈;
* 2.遇见操作符+,从栈中弹出两个数3和5,根据操作符计算结果为8,并将结果8入栈;
* 3.将5入栈;
* 4.遇见操作符*,弹出两个操作符5和8,计算结果为5*8=40,将40入栈;
* 5.将6入栈;
* 6.遇见操作符-,弹出两个数字6和40,计算结果为40-6=34,将34入栈;
* 7.字符串扫描完毕,栈中剩余数字34就是最终答案。
*
* @author chaixf
*
*/
public class PolandNotation {
public static void main(String[] args)