zoukankan      html  css  js  c++  java
  • 使用栈计算后缀表达式

    package 数据结构;
    
    import java.util.Stack;
    
    /**
     * @program: java_每天一题
     * @description: 使用栈实现逆波兰表达式(后缀表达式)计算器
     *               思路:遇到符号,就弹出两个元素进行运算,将运算结果入栈,继续遍历下一位
     *                    遍历完成后,栈中只有一个元素,即是运算结果
     *
     *               中缀表达式(3+4)*5-6转后缀表达式 3 4 + 5 * 6 -
     * @author: czg
     * @create: 2020-05-16 10:42
     */
    public class j_栈_逆波兰表达式_计算器 {
        public static void main(String[] args) {
            System.out.println(evalRPN(new String[]{"1","2", "3", "+","4", "*", "+", "5", "-"}));
        }
    
    
        //判断是否是符号
        public static boolean isSign(String sign){
            return "+-*/".contains(sign);
        }
    
        /**
         * 进行计算
         * @param left 左边数值
         * @param right 右变数字
         * @param sign 运算符
         * @return
         */
        public static int compute(int left,int right,String sign){
            int result=0;
            switch (sign){
                case "+": result=left+right;break;
                case "-": result=left-right;break;
                case "*": result=left*right;break;
                default: result=left/right;break;
            }
            return result;
        }
    
        public static  int evalRPN(String[] tokens) {
    
            //创建一个栈
            Stack<Integer> st=new Stack<>();
    
            for (String token : tokens) {
                //如果遇到符号就弹出栈顶两个数字进行求和
                if(isSign(token)){
                    //先右在左数值
                    int right=st.pop();
                    int left=st.pop();
                    //将计算结果放回栈中
                    st.push(compute(left,right,token));
                }else {
                    //遇到数字直接放到栈中
                    st.push(Integer.parseInt(token));
                }
            }
            //当计算完成时,栈中只剩下一个数,即为结果
            return st.pop();
        }
    }
  • 相关阅读:
    应该做什么样的研究:以Google为例
    机器学习问题方法总结
    浅析PageRank算法
    轮廓处理函数详细
    近视恢复方法
    一步一步深入视频接口
    什么是cookie
    Linux系统目录数和文件数限制
    九大视频接口全接触
    实时监控网卡流量的命令
  • 原文地址:https://www.cnblogs.com/czgxxwz/p/12899885.html
Copyright © 2011-2022 走看看