• 何为波兰式?何为逆波兰式?
  • 如何与表达式求值联系起来?

波兰式、逆波兰式是数据结构和编译原理里面提到的知识点,我们平时的运算式都是这样的 2 + 3 * (5 - 1)-10(中缀表达式),这样表达式易于阅读和计算,但是对于计算机这样就有点懵逼了。

前缀表达式: 比如2 + 3 * (5 - 1)这个表达式的前缀表达式为+ 2 * 3 - 5 1来表示  波兰表达式

中缀序表达式:比如 2 + 3 * (5 - 1)-10

后缀表达式:比如2 + 3 * (5 - 1)用逆波兰式来表示则是:2 3 5 1 - * +  逆波兰表达式

求表达式值:

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

  

问题可以转换为遍历表达式用一个堆来存数字,当遇见操作符的时候,弹出两个数字执行相应的运算,再压入堆里面,最后返回出来的就是运算表达式的结果。

public class Test {public static void main(String[] args) throws IOException {String[] tokens = new String[] { "2", "1", "+", "3", "*" };System.out.println(evalRPN(tokens));}public static int evalRPN(String[] tokens) {int returnValue = 0;String operators = "+-*/";Stack<String> stack = new Stack<String>();for (String t : tokens) {if (!operators.contains(t)) { //push to stack if it is a numberstack.push(t);} else {//pop numbers from stack if it is an operatorint a = Integer.valueOf(stack.pop());int b = Integer.valueOf(stack.pop());switch (t) {case "+":stack.push(String.valueOf(a + b));break;case "-":stack.push(String.valueOf(b - a));break;case "*":stack.push(String.valueOf(a * b));break;case "/":stack.push(String.valueOf(b / a));break;}}}returnValue = Integer.valueOf(stack.pop());return returnValue;}
}

  

参考:http://www.programcreek.com/2012/12/leetcode-evaluate-reverse-polish-notation/

转载于:https://www.cnblogs.com/spring87/p/5678764.html

逆波兰式与表达式求值相关推荐

  1. 波兰式、逆波兰式与表达式求值

    波兰式.逆波兰式与表达式求值 <数据结构>中关于栈的解释经常会涉及到逆波兰式,波兰式,中缀式表达式的求值问题.但是,十分惭愧,整个大一阶段, 数据结构的课程没有上够5节,没有意识要学习,吃 ...

  2. java逆波兰式求值_波兰式、逆波兰式与表达式求值

    波兰式.逆波兰式是<数据结构>课程中讲解关于栈的时候提到的,栈是很简单的一种数据结构.但是这些理论的提出却是计算机早期发展领域的重大突破,值得仔细回味. 1. 中缀表达式 我们在数学中学到 ...

  3. 逆波兰式数学表达式求解

    逆波兰式数学表达式求解 //输入逆波兰式表达式 #include<iostream> #include<string.h> using namespace std; //函数表 ...

  4. 逆波兰式 java_逆波兰式(后缀表达式)的计算 中缀表达式转后缀表达式(逆波兰式)【java实现】...

    一.逆波兰式(后缀表达式)计算 思路: * 1.遍历逆波兰式的集合 * 2.当遍历的元素为数字时,入栈 stack * 3.当遍历的元素为运算符时,stack栈弹出两个数,num2 num1,并用该运 ...

  5. 中缀表达式转换成逆波兰式

    栈的应用:中缀表达式转换成逆波兰式 小白前来报道!懒癌患者的第一篇博客,实属不易,先为自己鼓个掌. 编写程序,将任意一个合法的中缀表达式转换成逆波兰式. [问题描述]表达式计算是实现程序设计语言的基本 ...

  6. JavaScript实现逆波兰式

    中缀表达式就是我们平时见到的算数表达式:前缀表达式被称为波兰式:后缀表达式被称为逆波兰式 中缀表达式转换逆波兰式实现逻辑 创建运算符栈operator,结果栈result 中缀表达式从左到右出栈 当字 ...

  7. 编译原理 —— 逆波兰式

    什么是逆波兰式 逆波兰式除去了原表达式中的括号,并将运算对象写在前面,运算符写在后面,因而又称为后缀式.用逆波兰式表示表达式的最大优点是易于计算处理. 逆波兰式处理过程 逆波兰式只使用一个工作栈,当计 ...

  8. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  9. 波兰式与逆波兰式的转换和表达式求值

    文章目录 一.前言 二.表达式 1.中缀表达式 1.1 定义 2.前缀表达式 2.1 定义 2.2 求值 3.后缀表达式 3.1 定义 3.2 求值 三.表达式转换 1.中缀表达式转换成后缀表达式 1 ...

最新文章

  1. 背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue...
  2. 高速学会Mac上托管代码到github(具体解释)
  3. MAC 下 安装redis 并配置 php redis 扩展
  4. RabbitMQ快速入门--介绍和安装
  5. 不要轻易修改ESX主机的主机名
  6. SAP WebIDE 里 UI5 应用的隐藏文件 project.json
  7. 小程序如何实现tab切换,一部到位
  8. lnmp一键安装包删除添加的域名
  9. 批量处理文件,正则表达式处理文件
  10. pip换源及指令的使用
  11. vue.js快速入门 1
  12. 人人开源代码生成器启报错
  13. 矢量合成和分解的法则_矢量合成和分解的方法--平行四边形法则.ppt
  14. 极限编程-拥抱变化阅读感想(二)
  15. dvt高危患者的护理措施_DVT的预防措施
  16. 《JavaScript高级程序设计》五、引用类型(基本包装类型)
  17. 九、android的ListView实现数据列表展示
  18. 制作每日疫情通报省份地图
  19. 【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)
  20. 凸优化笔记(1) —— 基本概念

热门文章

  1. 计算机网络模拟校园,计算机网络课程设计模拟校园网组网实验.doc
  2. Unity Text 插入图片
  3. debian查看ip地址命令_鲜为人知而又实用的 Linux 命令大全
  4. linux io100的原因_Unix与Linux的区别与联系
  5. php fs 上传文件,PHP操作GridFS存储文件到MongoDB的三种方式
  6. kaldi语音识别实战pdf_FSMN网络结构在语音识别声学模型的实践
  7. python运维开发_Python自动化运维开发----基础(一)
  8. hadoop mysql 安装失败_hadoop 安装问题总结
  9. python是开源的它可以被移植到许多平台上对吗_Python程序设计答案
  10. linux apache目录权限配置,Linux系统架构-----Apache的用户访问权限的设置