数据结构第六章分讲、栈之逆波兰表达式

简介: (ReverseNotation,RPN,或逆波兰记法),也叫(将写在之后)。

 

一、逆波兰表达式

1.1概念

逆波兰式(Reverse Polish Notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)。

1.2算法:根据中缀表达式求后缀表达式

1.2.1思路分析

中缀表达式 a + b * c + ( d * e + f ) * g ,转换为后缀表达式为:a b c * + d e * f + g * +

举例:1+(2*3)+(4*5+6)*7==179,计算机无法识别 () 通过栈式算法如下:

image.gif编辑

1.2.2算法作用

由于计算机(计算器)无法识别我们通过 () 来限定的优先级,而计算机内部是栈式结构,相对计算机而言就需要逆波兰表达式算法。

1.2.3力扣

链接:逆波兰表达式

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack=new Stack<>();
        for(String s:tokens){
            if(isOperate(s)){
                int num2=stack.pop();
                int num1=stack.pop();
                switch(s){
                    case "+":
                    stack.push(num1+num2);
                    break;
                    case "-":
                    stack.push(num1-num2);
                    break;
                    case "*":
                    stack.push(num1*num2);
                    break;
                    case "/":
                    stack.push(num1/num2);
                    break;
                }
            }
            else{
                stack.push(Integer.parseInt(s));
            }
        }
        return stack.pop();
    }
    public boolean isOperate(String s){
        if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){
            return true;
        }
        return false;
    }
}

image.gif

目录
相关文章
|
5天前
|
算法 C语言 C++
【practise】栈的压入和弹出序列
【practise】栈的压入和弹出序列
|
3天前
栈的几个经典应用,真的绝了
文章总结了栈的几个经典应用场景,包括使用两个栈来实现队列的功能以及利用栈进行对称匹配,并通过LeetCode上的题目示例展示了栈在实际问题中的应用。
栈的几个经典应用,真的绝了
|
4天前
|
存储 网络协议 Linux
用户态协议栈06-TCP三次握手
用户态协议栈06-TCP三次握手
|
4天前
|
存储
全局变量和局部变量在堆和栈的区别
全局变量和局部变量在堆和栈的区别
11 0
|
5天前
|
存储 人工智能 运维
高质量存储力发展问题之浪潮信息发布的大模型智算软件栈的定义如何解决
高质量存储力发展问题之浪潮信息发布的大模型智算软件栈的定义如何解决
8 0
|
5天前
|
设计模式 算法 C语言
【CPP】栈、双端队列、队列、优先级队列与反向迭代器
【CPP】栈、双端队列、队列、优先级队列与反向迭代器
|
5天前
|
存储 算法 C++
【CPP】栈简介及简化模拟实现
【CPP】栈简介及简化模拟实现
|
5天前
【数据结构】用栈实现队列
【数据结构】用栈实现队列
|
5天前
【数据结构】用队列实现栈
【数据结构】用队列实现栈
|
5天前
【数据结构】栈
【数据结构】栈