一. 后缀表达式:

后缀表达式,逆波兰表达式,是指运算符位于操作符之后,计算机对该式是从做到右进行计算,计算过程如下例子

二.计算思路

对于后缀表达式的计算,需要一个栈即可,

即遇见数字压栈,遇见运算符从栈中取出两个数,根据运算进行操作,

需要注意的是,减法以及除法都是后出栈作为减数或除数,先出栈的作为被减数或者被除数.

最后将计算结果压入该栈,计算完毕.

本章给出的是逆波兰表达式(后缀表达式)的计算Demo,为了便于计算,在给出的后缀表达式中加入了空格,并且使用list集合进行遍历,至于中缀怎么转变成后缀,后面文章会给出案例.

代码如下:

package com.ebiz.stack;import java.util.ArrayList;
import java.util.List;
import java.util.Stack;/*** @author YHj* @create 2019-07-24 14:17* 逆波兰表达式,实现计算器*/
public class NiPoLandCalculator {public static void main(String[] args) {//定义一个逆波兰表达式(后缀表达式)  (30+4)*5-6 => 30 4+5*6-//为了方便,数字以及运算符之间用空格隔开String expression="30 4 + 5 * 6 - ";List<String> list = getList(expression);int resul=getResult(list);System.out.println("resul = " + resul);}//输出计算结果private static int getResult(List<String> list) {Stack<String> stack = new Stack<>();for (String s : list) {//匹配数字,可匹配多位数if (s.matches("\\d+")){stack.push(s);}else {int num01=Integer.parseInt(stack.pop());int num02=Integer.parseInt(stack.pop());int result=0;if (s.equals("+")){result=num01+num02;}else if (s.equals("-")){result=num02-num01;}else if (s.equals("*")){result=num02*num01;}else if (s.equals("/")){result=num02/num01;}else {throw new RuntimeException("无法解析的字符串");}stack.push(""+result);}}return Integer.parseInt(stack.pop());}//将表达式的值以空格进行拆分,加入到arraylist中,便于操作(不适用索引)private static List<String> getList(String str) {String[] split = str.split(" ");ArrayList<String> list = new ArrayList<>();for (String s : split) {list.add(s);}return list;}}

转载于:https://www.cnblogs.com/jiushixihuandaqingtian/p/11241126.html

数据结构之栈对逆BoLand表达式的计算相关推荐

  1. 数据结构:栈实现逆波兰计算器

    栈实现逆波兰计算器 前言 上篇博文中已经介绍了栈实现中缀表达式计算器,中缀表达式形如 "1+((2+3)*4)-5" 对人比较容易计算,但对于计算机却是一件比较困难的事,而后缀表达 ...

  2. 栈应用-逆波兰表达式(CPP实现简单易懂图解)

    栈应用-逆波兰表达式(后缀表达式) 逆波兰表达式定义: 在由运算符(operator)和操作数(operand)组成的表达式中不使用括号(parenthesis-free)即可表示带优先级的运算关系 ...

  3. 数据结构之栈的应用:表达式求值

    表达式求值 思维导图: 求值算法: 中缀转后缀求值:(后缀求值) 中缀转前缀求值:(前缀求值) 转化算法:(中缀转后缀) 中缀表达式的计算(中缀转后缀+后缀求值): 总结: 思维导图: 求值算法: * ...

  4. 数据结构与算法——中缀转后缀表达式以及计算

    中缀表达式转后缀表达式 思路分析: 初始化两个栈:运算符栈s1 和储存中间结果的栈s2 从左至右扫描中缀表达式 遇到操作数,将其压入s2 遇到运算符时,比较其与s1 栈顶运算符的优先级 如果s1 为空 ...

  5. 数据结构之栈实现中缀转后缀并计算结果

    一.中缀变后缀过程分析 给定一个中缀,最后变为后缀的过程其实并不算复杂,下面分析一下过程: 1. 首先面对一个中缀表达式,我们需要两个栈,一个用来存放运算符,即符号栈 operatorstack,一个 ...

  6. 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)

    栈的三种表达式:前缀.中缀和后缀表达式,后缀也叫逆波兰表达式 前缀(波兰表达式) 中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式) 后缀(逆波兰表达式) 计算过程 ...

  7. 前缀表达式后缀表达式_你知道波兰表达式和逆波兰表达式吗

    什么是波兰表达式 我们日常的运算表达式通常是如下形式,这种成为中缀表达式,也就是运算符在运算数的中间.这种表达式人类很容易识别,并根据其进行计算,但计算机识别这种表达式非常困难. a + b * (c ...

  8. nyoj35——逆波兰表达式

    逆波兰表达式又称作后缀表达式,在四则混合运算的程序设计中用到. 例如: 1+2写成后缀表达式就是12+ 4+5*(3-2)的后缀表达式就是4532-*+ 后缀表达式在四则运算中带来了意想不到的方便,在 ...

  9. php逆波兰表达式,PHP实现逆波兰式 - 计算工资时用

    近期一个小项目需要用到公式运算, 所以就进行一些了解,以下内容均属于个人经验. 在PHP中实现公式表达式四则运算大概有两种方法: 1)使用系统函数eval 2)将表达式转换成逆波兰表达式进行计算. / ...

最新文章

  1. R语言绘制二维密度图
  2. Android.bp 语法浅析-Android10.0编译系统(八)
  3. python中文件分类_Python中的类是否在不同的文件中?
  4. python输出杨辉三角啊二维数组_Java输出杨辉三角形(使用二维数组)
  5. JAVA15.JDK15.7 HiddenClass
  6. 计算机辅助制造期末试题答案,精编国家开放大学电大本科《机械CAD-CAM》2025期末试题及答案(试卷号:1119)...
  7. C语言验证6174数学问题
  8. 如何显示内存中的 HTML 网页
  9. Matlab运用mapping包在地图上绘制散点图(热力图)
  10. windows访问linux下samba无需密码设置
  11. android 开发规范
  12. 关于信息化的全球进程的思考
  13. C# string.Format json格式字符串报错”输入字符串的格式不正确“
  14. 网吧服务器网络维护教程,高效维护网吧局域网网络的方法
  15. 带壳截图 android,给手机截屏带个「套」:带壳截图应用合辑
  16. 手把手教你开发列举网自动发帖软件!神器哈
  17. 360随身WiFi驱动下载
  18. 废旧电脑改装个人服务器
  19. 颈椎牵引器的介绍-颈托护颈
  20. 云服务器查看操作系统,如何查看云服务器的操作系统

热门文章

  1. 【机器视觉学习笔记】python安装OpenCV并设置自动补全及代码提示
  2. Maze(BFS处理)
  3. Shell 脚本知识回顾 (五) —— Shell 循环
  4. TCP选项:TCP_NODELAY和TCP_CORK
  5. 【Fedora20】 samba配置
  6. BMP图像文件格式分析附带图解
  7. [react] 请说说什么是useImperativeHandle?
  8. javascript学习系列(9):原数组发生变化的情况
  9. [css] 说出至少十条你理解的css规范
  10. 工作333:uni-增加添加成功提示