利用双栈实现加减乘除等表达式(包括不省略括号)计算

**利用双栈实现加减乘除等表达式(包括不省略括号)计算

**
首先我们明确一下这个问题的算法非常简单,读者不需要有心理压力。。看完就会

算法的思路:我们首先需要创建两个栈,两个栈一个用来存放数据叫做操作数栈,另一个栈用来存放运算符叫做运算符栈。首先我们从左向右的读取表达式,遇到“(” 我们忽略不需要对左括号做出什么反应,如果我们读取到+、-、、/的时候我们将他们压入运算符栈,读到数字的时候我们把它压入操作数栈,**

如果我们读到”)“的时候,我们将操作数中的一个数字弹出栈,然后将运算符栈中的最上面的运算符弹出栈,然后我们再从操作数栈中弹出一个数字,将两个数字和运算符进行计算,计算结果压入操作数栈中(仅限于括号中两个数进行计算)

下面将代码附上


```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

上一篇:谷粒商城自定义校验功能


下一篇:【Matlab 控制】利用 Matlab Function 绘制分段函数