主要思路:

这个和Dijkstrad的双栈算法不太一样,后缀的计算只需要一个栈即可。

用一个栈来存数字栈即可。

遇到数字,压栈。

遇到运算法,从栈中弹出相应的数字,用该运算法计算得到结果。

再次压入栈中。

最终从栈中弹出最终运算结果。

方法实现:

//1.3.11
//only support +-*/ operator
package com.qiusongde;import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;public class EvaluatePostfix {public static void main(String[] args) {Stack<Double> vals = new Stack<Double>();while(!StdIn.isEmpty()) {String s = StdIn.readString();if(s.equals("+")) {double v = vals.pop();//second operandv = vals.pop() + v;vals.push(v);}else if(s.equals("-")) {double v = vals.pop();//second operandv = vals.pop() - v;vals.push(v);}else if(s.equals("*")) {double v = vals.pop();//second operandv = vals.pop() * v;vals.push(v);}else if(s.equals("/")) {double v = vals.pop();//second operandv = vals.pop() / v;vals.push(v);}else {vals.push(Double.parseDouble(s));}}StdOut.println(vals.pop());}}

测试1:( 2 + ( ( 3 + 4 ) * ( 5 * 6 ) ) )

用Evaluate计算的结果:

用InfixToPostfix转换结果:

用EvaluatePostfix计算的结果:

测试2:( ( ( 6 + 2 ) * 5 ) - ( 8 / 4 ) )

用Evaluate计算的结果:

用InfixToPostfix转换结果:

用EvaluatePostfix计算的结果:

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

算法(Algorithms)第4版 练习 1.3.11相关推荐

  1. 算法导论第三版第十一章11.1-4

    算法导论第三版第十一章11.1-4 我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典.开始时,该数组中可能包含一些无用信息,但要堆整个数组进行初始化时不太实际的,因为该数组的规模太大 ...

  2. 《算法》第四版《Algorithms》4th Edition 学习环境搭建

    Robert Sedgewick 的<算法>第四版,作者有编写一个库,供讲解学习使用.官网上有详细的配置信息,此处只是做个记录. 网站:http://algs4.cs.princeton. ...

  3. IDEA配置java《算法》第四版环境(耗时6小时,总算配置成功了,希望能给大家一点帮助)

    0.前言 最近在学java语言,然后想用java语言来学习算法,在网上听说看<算法>第四版学习java算法不错,于是就去下载了<算法>电子书来啃 今天看到了用java java ...

  4. c语言经典算法大全pdf,c语言经典算法100例pdf版.pdf

    c语言经典算法100例pdf版 C 语言经典算法 100 例 C 语言编程经典 100 例 A:[程序1] 题目:有1.2.3.4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程 ...

  5. 给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)

    给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1) template<typename T> void insert_recursive(BinaryTree< ...

  6. 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)

    写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3) TREE-PREDECESSOR(x)if x.left != NILreturn TREE-MAXIMUM(x.left) ...

  7. 写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2)

    写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2) template<typename T> BinaryTreeNode<T>* ...

  8. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)

    二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...

  9. 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)

    二叉树的遍历(算法导论第三版12.1-4) 1⃣️先序遍历 template<typename T> void preorder_tree_wald(BinaryTreeNode<T ...

  10. 利用链表实现可合并堆(算法导论第三版思考题10-2)

    利用链表实现可合并堆(算法导论第三版思考题10-2) a 链表已排序 创建一个空堆: Θ(1) 插入:Θ(n),插入后依然保持排序 最小值:Θ(1),第一位便是 取最小值:Θ(1) 合并:Θ(n),可 ...

最新文章

  1. mysql分类和事务回滚
  2. 53 Paramiko的使用
  3. 佛教:关于时间(段)的几种描述
  4. 如何自定义SAP Spartacus店铺的购物车图表css风格
  5. java 字符串时间处理_Java 时间和字符换的处理
  6. 顶尖学府 加州伯克利大学开发高效机器人操纵框架
  7. ldconfig 和 ldd 命令用法
  8. EDAS-机器导入失败
  9. 使用Visual Studio 部署SharePoint时提示“路径中具有非法字符”
  10. web页面加载、解析、渲染过程
  11. 时间格式2020-01-13T16:00:00.000Z中的T和Z分别表示什么,如何处理
  12. 程序员写在猝死的前一天
  13. 计算机网络知识点总结(超全,配有常见习题)
  14. 码科同城小程序源码(含后端php源码)
  15. 要么听我的,要么走开(摘自《代码之道》第8章)
  16. 使用Windows PE部署Windows镜像
  17. 制作自己的字体图标库
  18. VOS中客户在设置服务器防火墙时需要打开哪些 VOS 应用端口
  19. Mac系统下修改Java的版本
  20. 小猫爪:i.MX RT1050学习笔记15-FlexSPI-FLASH使用3-KEIL FLASH算法中的使用

热门文章

  1. 新版 apache_2.0.54 php-5.0.4 mysql-4.1.12a 组合安装向导(原创)
  2. Unicode的前世今生
  3. WKWebView 实现iOS与H5的交互转
  4. javascript菜鸟学习20170113
  5. [软件架构:设计模式系列C#篇]系列教程汇总
  6. VC++大数据量绘图时无闪烁刷屏技术实现
  7. + ,- (加号,减号) 是数字类型吗?(sql server 2000中)
  8. virtualbox 启动时Kernel driver not installed (rc=-1908) 错误的解决方法
  9. Head First Design Pattern
  10. codeforces 700B Connecting Universities