ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-02-23 21:31:49  阅读:184  来源: 互联网

标签:省略 ops equals 双栈 else 运算符 pop vals 加减乘除


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

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

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

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

下面将代码附上


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

标签:省略,ops,equals,双栈,else,运算符,pop,vals,加减乘除
来源: https://blog.csdn.net/lyq1525761478/article/details/114002759

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有