美文网首页算法第四版习题讲解
算法练习(30):中序表达式与后序表达式(1.3.9-1.3.1

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

作者: kyson老师 | 来源:发表于2017-10-23 22:43 被阅读362次

本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号: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壁纸宝贝上线了,欢迎大家下载。

相关文章

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

    本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本...

  • JavaScript中序表达式转后序表达式并计算结果

    为什么要转换 中序表达式:10(8-21)*2-30 后序表达式: 10821-2*30- 中序表达式是给人看的,...

  • 波兰式&逆波兰式

    波兰式 又称为先序表达式,前缀表达式 逆波兰式 又称为后序表达式,后缀表达式

  • 中缀/后缀/前缀表达式求值

    三种表达式的定义: 中缀/后缀/前缀表达式根据二叉树的中序/后序/前序遍历而来,举个例子(3 + 4) × 5 -...

  • 中序、前序、后序表达式

    1.中序表达式 中序表达式对我们而言是很直观的(我们平时接触的就是这个),但计算机处理起来比较麻烦(括号、优先级之...

  • 二叉树前中后序算法

    求下图前中后序 数据模型构建 前中后序算法 二叉树算法层序输出

  • 算法:树

    树的常用算法先序、中序、后序递归算法: 层序递归算法:参考:https://blog.csdn.net/qq_38...

  • 遍历二叉树

    总结了二叉树的先序、中序、后序遍历算法,分别给出了这三种算法的递归写法和迭代写法。默认数据结构如下: 先序 中序 后序

  • 二叉树遍历算法

    二叉树遍历算法有4种,先序、中序、后序和层序遍历 先序遍历:先根、后左、再右中序遍历:先左、后根、再右后序遍历:先...

  • ALI 算法

    二叉树遍历算法: 按层遍历, 中序前序后序:

网友评论

    本文标题:算法练习(30):中序表达式与后序表达式(1.3.9-1.3.1

    本文链接:https://www.haomeiwen.com/subject/adyzuxtx.html