栈实现综合计算器和逆波兰计算器的定义代码

举报
周小末天天开心 发表于 2022/12/31 16:29:36 2022/12/31
【摘要】 栈实现综合计算器(中缀表达式)计算思路:(1)通过一个 index值(索引),来遍历我们的表达式(2)如果我们发现是一个数字,就直接入数栈(3)如果发现扫描到是一个符号,就分如下情况1)如果发现当前的符号栈为空,就直接入栈2)如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到结果,入数...

栈实现综合计算器(中缀表达式)

计算思路:

(1)通过一个 index值(索引),来遍历我们的表达式

(2)如果我们发现是一个数字,就直接入数栈

(3)如果发现扫描到是一个符号,就分如下情况

1)如果发现当前的符号栈为空,就直接入栈

2)如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈,如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈

(4)当表达式扫描完毕,就顺序的从数栈和符号栈中pop出响应的数和符号,并运行

(5)最后在数栈只有一个数字,就是表达式的结果

逆波兰计算器

完成一个逆波兰计算器,要求完成如下任务:

(1)输入一个逆波兰表达式(后缀表达式),使用栈(Stack),计算其结果。

(2)支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。

思路分析:

例如:(3 + 4) * 5 - 6 对应的后缀表达式就是 34 + 5 * 6-,针对后缀表达式求值步骤如下:

1)从左至右扫描,将3和4压入堆栈;

2)遇到 + 运算符,因此弹出4和3(4为栈顶元素,3位次顶元素),计算出3 + 4的值,得7,再将7入栈;

3)将5入栈;

4)接下来 * 运算符,因此弹出5和7,计算出7 * 5 = 35,将35入栈;

5)将6入栈;

6)最后是 - 运算符,计算出35 - 6的值,即29,由此得出最终结果


import.java.util.ArrayList;
import.java.util.List;
import.java.util.Stack;
public class PolandNotation {
    public static void main(String[] args) {
        //先定义逆波兰计算器
        //为了方便运算,逆波兰表达式的数字和符号使用空格隔开
        List<String>list = getListString(suffixExpression);
        System.out.println("rpnList=" + list);
        int res = calculate(list);
        System.out.println("计算的结果是=" + res);
        //将一个逆波兰表达式,依次将数据和运算符放入到ArrayList中
    public static List<String>getListString(String suffixExpression) {
        String[] solit = suffixExpression.split(" ");
        List<String>list = new ArrayList<String>();
        for(String ele:split) {
            list.add(ele);
            }
        return list;
    }
    /*
    1)从左至右扫描,将3和4压入堆栈;

    2)遇到 + 运算符,因此弹出4和3(4为栈顶元素,3位次顶元素),计算出3 + 4的值,得7,再将7入栈;

    3)将5入栈;

    4)接下来 * 运算符,因此弹出5和7,计算出7 * 5 = 35,将35入栈;
    
    5)将6入栈;

    6)最后是 - 运算符,计算出35 - 6的值,即29,由此得出最终结果
    */
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。