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();
        }
    }
  • 相关阅读:
    jvm 优化
    SqlServer体系结构
    sqlserver2012 在视图中建索引
    win10 桌面设置为远程桌面
    ORACLE 查询某表中的某个字段的类型,是否为空,是否有默认值等
    activemq读取剩余消息队列中消息的数量
    Oracl 一条sql语句 批量添加、修改数据
    ClickOnce一项Winform部署
    C#语言中的修饰符
    关于MySQL集群的一些看法
  • 原文地址:https://www.cnblogs.com/czgxxwz/p/12899885.html
Copyright © 2011-2022 走看看