zoukankan      html  css  js  c++  java
  • 算法-第四版-练习1.3.9解答

    问题

    编写一段程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:

    1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )

    你的程序应该输出:

    ( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )

    解决思路

    使用两个栈分别保存数值和操作符,分别为opr和data。顺序处理输入字符串的字符:

    • 如果为操作符,压入opr。
    • 否则,如果为右括号,从data取出两个操作数,从opr取出1个操作符,添加括号组合后压入data。
    • 否则,为数字,压入data。

    以上处理办法需要输出满足以下条件,也就是有如下的假设:

    • 输入表达式是合法的。

    代码

    /**
     * Description : 
     * Author      : mn@furzoom.com
     * Date        : Oct 20, 2016 9:26:55 AM
     * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
     */
    
    package com.furzoom.lab.algs.ch103;
    
    /**
     * ClassName : E10309 <br>
     * Function : TODO ADD FUNCTION. <br>
     * date : Oct 20, 2016 9:26:55 AM <br>
     * 
     * @version
     */
    public class E10309
    {
        public static String getCompleteExpression(String exp)
        {
            String[] params = exp.split(" ");
            Stack<String> oprStack = new Stack<String>();
            Stack<String> dataStack = new Stack<String>();
            for (int i = 0; i < params.length; i++) {
                if (isOperator(params[i])) {
                    oprStack.push(params[i]);
                } else if (params[i].equals(")")) {
                    String d1 = dataStack.pop();
                    String d2 = dataStack.pop();
                    String op = oprStack.pop();
                    dataStack.push("( " + d2 + " " + op + " "+ d1 + " )");
                } else {
                    dataStack.push(params[i]);
                }
            }
            return dataStack.pop();
        }
       
        public static void main(String[] args)
        {
            String expression = "1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )";
            String result = getCompleteExpression(expression);
            System.out.println(result);
        }
        
        private static boolean isOperator(String s)
        {
            return (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/"));
        }
     
    }
    


    结果

    ( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )



    算法-第四版-1.3 背包、队列和栈-习题索引汇总

    算法-第四版习题索引汇总


  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710194.html
Copyright © 2011-2022 走看看