**利用双栈实现加减乘除等表达式(包括不省略括号)计算
**
首先我们明确一下这个问题的算法非常简单,读者不需要有心理压力。。看完就会
算法的思路:我们首先需要创建两个栈,两个栈一个用来存放数据叫做操作数栈,另一个栈用来存放运算符叫做运算符栈。首先我们从左向右的读取表达式,遇到“(” 我们忽略不需要对左括号做出什么反应,如果我们读取到+、-、、/的时候我们将他们压入运算符栈,读到数字的时候我们把它压入操作数栈,**
如果我们读到”)“的时候,我们将操作数中的一个数字弹出栈,然后将运算符栈中的最上面的运算符弹出栈,然后我们再从操作数栈中弹出一个数字,将两个数字和运算符进行计算,计算结果压入操作数栈中(仅限于括号中两个数进行计算)
下面将代码附上
```cpp
```cpp
```cpp
```cpp
```java
package evaluate;
import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdIn;
import java.util.Stack;
public class Evaluate {
Stack<String> ops=new Stack<String>();
Stack<Double> vals=new Stack<Double>();
while(!StdIn.isEmpty())
{
String s=StdIn.readString();
if(s.equals("("))
;
else if(s.equals("+"))
ops.push(s);
else if(s.equals("-"))
ops.push(s);
else if(s.equals("*"))
ops.push(s);
else if(s.equals("/"))
ops.push(s);
else if(s.equals(")"))
{
String p=ops.pop();
double v=vals.pop();
if(p.equals("+"))
v=vals.pop()+v;
else if(p.equals("-"))
v=vals.pop()-v;
else if(p.equals("*"))
v=vals.pop()*v;
else if(p.equals("/"))
v=vals.pop()/v;
vals.push(v);
}
else
{
vals.push(Double.parseDouble(s));
}
StdOut.print(vals.pop());
}
}
导入的包网盘地址附上https://pan.baidu.com/s/1QHKbjQFP8-0QOX2ON6biog
提取码:53yz