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

浙公网安备 33010602011771号