×

算法练习(30):中序表达式与后序表达式(1.3.9-1.3.10)

96
kyson老师
2017.10.23 22:43* 字数 405

本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论

算法(第4版)

知识点

  • 中序表达式
  • 后序表达式

题目

1.3.9 编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) ) 你的程序应该输出((1 + 2) * ((3 - 4) * (5 - 6)))


1.3.9 Write a program that takes from standard input an expression without left pa- rentheses and prints the equivalent infix expression with the parentheses inserted. For example, given the input:

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

your program should print

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

题目

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


1.3.10 Write a filter InfixToPostfix that converts an arithmetic expression from infix to postfix.

分析

本人所有简书的算法文章详细分析已经移入小专栏:算法四习题详解,欢迎大家订阅

答案

public static void main(String[] args) {
        String expression = "(1+((2+3)*(4*5)))";
        Stack<String> ops = new Stack<String>();
        double result = 0;
        for (int j = 0; j < expression.length(); j++) {
            char charAtIndex = expression.charAt(j);
            String s = String.valueOf(charAtIndex);
            if (s.equals("(")) {
                ;
            } else if (s.equals("+")) {
                ops.push(s);
            } else if (s.equals("-")) {
                ops.push(s);
            } else if (s.equals("*")) {
                ops.push(s);
            } else if (s.equals("/")) {
                ops.push(s);
            } else if (s.equals(")")) {
                String op = ops.pop();
                System.out.print(op);
            } else {
                System.out.print(s);
            }
        }
    }

代码索引

InfixToPostfix.java

视频讲解

点此观看分析视频:顶级程序员教你学算法(30)-中序表达式与后序表达式(1.3.9)

广告

我的首款个人开发的APP壁纸宝贝上线了,欢迎大家下载。

日记本
Web note ad 1