博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法(Algorithms)第4版 练习 1.3.10
阅读量:7211 次
发布时间:2019-06-29

本文共 1362 字,大约阅读时间需要 4 分钟。

主要思路:和1.3.9相似,只不过运算表达式的生成方式不一样

用Dijkstra的双栈算法。

遇到数字则压入数字栈中(String)。

遇到运算符则压入运算符栈中(String)。

遇到右括号时,从数字栈和运算法栈中弹出相应的元素,生成相应的运算表达式(后缀表示)。

再次压入数字栈中(String)。

最后从数字栈中弹出最终的运算表达式。

 

方法实现:

//1.3.10//only support +-*/ operatorpackage com.qiusongde;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class InfixToPostfix {            public static void main(String[] args) {                Stack
ops = new Stack
(); Stack
vals = new Stack
(); while(!StdIn.isEmpty()) { String s = StdIn.readString(); if(s.equals("(")) ; else if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) { ops.push(s); } else if(s.equals(")")) { String op = ops.pop();//operator String v = vals.pop();//value //only support +-*/ operator String subexpression = vals.pop() + " " + v + " " + op; vals.push(subexpression); } else { vals.push(s); } } StdOut.println(vals.pop()); }}

 

测试结果:

转载于:https://www.cnblogs.com/songdechiu/p/6513889.html

你可能感兴趣的文章
JS 英文不截断单词截取
查看>>
Oracle 数据定义
查看>>
百度分享自定义内容和图片
查看>>
关于代码评审的微博讨论汇集
查看>>
PHP vs Java
查看>>
C# 连接SQL Server数据库的几种方式--server+data source等方式
查看>>
Qt控件中的属性sizePolicy说明
查看>>
针对Properties中实时性要求不高的配置参数,用Java缓存起来
查看>>
Flex读取txt文件里的内容(二)
查看>>
mysql 变量set
查看>>
Deep Learning(深度学习)学习笔记整理系列
查看>>
【C解毒】缘木求鱼
查看>>
lua对模块接口扩展的一种方法
查看>>
DB,Cache和Redis应用场景分析
查看>>
CGI(通用网关接口)
查看>>
Cocos2d-x教程(28)-ttf 字体库的使用
查看>>
Mysql group by,order by,dinstict优化
查看>>
Notepad++ 经常使用快捷键 (MEMO)
查看>>
nyoj116士兵杀死(两)段树单点更新
查看>>
《Programming WPF》翻译 第3章 2.处理输入
查看>>