算法-第四版-练习1.3.10解答

问题

编写一个过滤器InfixToPostfix,将算术表达式由中序表达式转为后序表达式。

解决思路

简化问题,不考虑运算的优先级,或者说优先级全部由括号确定。如指处理以下输入:

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

代码

/**
 * Description : 
 * Author      : mn@furzoom.com
 * Date        : Oct 20, 2016 10:41:49 AM
 * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
 */
package com.furzoom.lab.algs.ch103;

import java.util.Scanner;

import edu.princeton.cs.algs4.StdIn;

/**
 * ClassName    : E10310 <br>
 * Function     : InfixToPostfix <br>
 * date         : Oct 20, 2016 10:41:49 AM <br>
 * 
 * @version 
 */

public class E10310
{
    private static void infixToPostfix(String exp)
    {
        String[] params = exp.split(" ");
        Stack<String> stack = new Stack<String>();
        for (int i = 0; i < params.length; i++) {
            if (isOperator(params[i])) {
                stack.push(params[i]);
            } else if (params[i].equals("(")) {
                continue;
            } else if (params[i].equals(")")) {
                System.out.print(stack.pop() + " ");
            } else {
                System.out.print(params[i] + " ");
            }
        }
        System.out.println();
    }
    
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            infixToPostfix(scanner.nextLine());
        }
        scanner.close();
    }
    
    private static boolean isOperator(String s)
    {
        return (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/"));
    }
}

结果

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

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

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


原文地址:https://www.cnblogs.com/furzoom/p/7710193.html