基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)

题目要求

P1449题目链接

在这里插入图片描述

分析

给出后缀表达式求值,就相当于没了括号,而且很直接。

我们需要使用栈结构来完成任务。

Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就着用一下吧……

注意到@就停止,不到@,每遇到一个数就入栈,每遇到一个符号就出栈两个数并进行对应运算,结果再入栈。

AC代码(Java语言描述)

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        Scanner scanner = new Scanner(System.in);
        String sequence = scanner.nextLine();
        scanner.close();
        int tempNum = 0, x, y;
        for (char c : sequence.toCharArray()) {
            if (c == '@') {
                break;
            }
            switch (c) {
                case '+':
                    x = stack.pop();
                    y = stack.pop();
                    stack.push(y+x);
                    break;
                case '-':
                    x = stack.pop();
                    y = stack.pop();
                    stack.push(y-x);
                    break;
                case '*':
                    x = stack.pop();
                    y = stack.pop();
                    stack.push(y*x);
                    break;
                case '/':
                    x = stack.pop();
                    y = stack.pop();
                    stack.push(y/x);
                    break;
                case '.':
                    stack.push(tempNum);
                    tempNum = 0;
                    break;
                default:
                    tempNum = tempNum*10+c-'0';
                    break;
            }
        }
        System.out.println(stack.pop());
    }
}
发布了680 篇原创文章 · 获赞 1418 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104813074