算法-第四版-练习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 - * *
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。