March 10.2022 --补充(POLAND NOTATION)

2024-04-28 05:08

本文主要是介绍March 10.2022 --补充(POLAND NOTATION),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

March 10.2022 --补充(POLAND NOTATION)

逆波兰表达式又叫做后缀表达式。逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasiewicz)于1929年首先提出的一种表达式的表示方法 。逆波兰表达式把运算量写在前面,把算符写在后面。

前 中 后缀表达式
  • 前缀表达式:波兰表达式 不含括号的的算数表达式,将运算符写在前面,操作数写在后面

    *-ab+cd
    
  • 中缀表达式:我们通常理解的表达式 必须含括号,操作符处于操作数的中间

    (a-b)*(c+d)
    
  • 后缀表达式:逆波兰表达式 不含括号,运算符放在两个运算对象的后面。

    ab-cd+*
    

    例如: (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 - , 针对后缀表达式求值步骤如下

    1. 从左至右扫描,将3和4压入堆栈;
    2. 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素),计算出3+4的值,得7,再将7入栈;
    3. 将5入栈;
    4. 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;
    5. 将6入栈;
    6. 最后是-运算符,计算出35-6的值,即29,由此得出最终结果
package Zhan;import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
//如果要使用List 包 那必须要导包!! alt + enterpublic class PolandNotation {public static void main(String[] args) {//逆波兰表达式 (3+4)*5-6; 其中该式子的逆波兰表达式可以写为 3 4 + 5 * 6 -;String sufficExpression ="30 40 + 5 * 6 -";//思路//1.先将 该计算表达式的逆波兰表达式字符串 放到 Arratlist中//2.将 Arraylist 传给一个方法,遍历 Arraylist 配合栈完成计算List<String> list=  getlistString(sufficExpression);System.out.println("list"+list);int res =calculate(list);System.out.println("计算的结果是"+res);}private static List<String> getlistString(String sufficExpression) {//将后缀表达式按照空格来拆分,拆分成字符串数组String[] split = sufficExpression.split(" ");//创建一个字符串形式的数组列表 用于接收 被拆分的字符串数组ArrayList<String> list = new ArrayList<>();for(String ele:split){list.add(ele);}return list;}//完成对逆波兰表达式的计算// 1.从左往右扫描, 将 3 和 4 压入栈中;//2.遇到 + 号运算符 弹出 4 和 3 (其中 4为栈顶元素,3为次栈顶元素),计算出 3+4 的值,得到7 将结果7入栈//3.将5 入栈//4.遇到 * 运算符 ,弹出5 和 7  计算出 5*7=35 将35入栈//5.遇到6 将6入栈//6.遇到 - 运算符,计算出来 35-6的值 得到最终结果//扫描的过程其实就是对list 的遍历public static int  calculate(List<String> ls){//创建一个栈Stack<String> stack = new Stack<>();//遍历 lsfor(String item:ls){if(item.matches("\\d+")){// 正则表达式如果遍历到的是一个或者多位数 则 入栈stack.push(item);}else { //遍历到的是一个运算符 则pop出两个数字 第一个出栈的是num2 第二个出栈的数命名为num1int num2 = Integer.parseInt(stack.pop());int num1 = Integer.parseInt(stack.pop());//由于出栈的元素的类型为 string  需要转化为int  类型所以调用Integer.parseInt方法 将字符串类型转化为 int 类型方便计算int res = 0;if(item.equals("+")){res = num1+num2;}else if(item.equals("-")){//在此处请注意 出栈的顺序res = num1 - num2;}else if(item.equals("*")){res = num1*num2;}else if(item.equals("/")){res = num1 / num2;}else {throw new RuntimeException("你输入的格式有误,请重新输入");}//请注意 这里使用了一个小技巧:即通过在前后加空格的方法,将整数类型转化为字符串类型stack.push(""+res);}}return Integer.parseInt(stack.pop());}
}

这篇关于March 10.2022 --补充(POLAND NOTATION)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942389

相关文章

【多系统萎缩患者必看】✨维生素补充全攻略,守护你的健康每一天!

亲爱的朋友们,今天我们要聊一个既重要又容易被忽视的话题——‌多系统萎缩患者如何科学补充维生素‌!🌟 在这个快节奏的生活中,健康成为了我们最宝贵的财富,而对于多系统萎缩(MSA)的患者来说,合理的营养补充更是维护身体机能、提升生活质量的关键一步。👇 🌈 为什么多系统萎缩患者需要特别关注维生素? 多系统萎缩是一种罕见且复杂的神经系统疾病,它影响身体的多个系统,包括自主神经、锥体外系、小脑及锥

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

Numpy random.random()函数补充

np.random.random() np.random.random()的作用是生成指定形状的均匀分布的值为[0,1)的随机数 参数为size,也就是用于指定的形状大小 import numpy as npprint(np.random.random(size=(2, 2)))# [[0.19671797 0.85492315]# [0.99609539 0.66437246]]

”CSS 网格“二维布局系统(补充)——WEB开发系列32

CSS 网格布局是一种二维布局系统,用于网页设计。通过使用网格,你可以将内容以行和列的形式进行排列。此外,网格布局还能够简便地实现一些复杂的布局结构。 一、什么是网格布局? CSS网格布局是一种二维布局系统,它允许我们创建复杂的网页布局,既可以处理行也可以处理列。与传统的布局方法不同,网格布局将网页分成多个可控的区域,这些区域可以任意排列、对齐和调整大小。网格布局使得创建灵活且响应

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layout,简称 Flexbox)是 CSS3 中引入的一种布局模式,提供一种有效的方式来布局、对齐和分配容器内空间,特别是在动态和复杂的应用界面中。 1、

UML的图及其他图补充

一、UML图 1.类图 ‌类图‌是统一建模语言(UML)中的一种静态结构图,主要用于描述软件系统的静态结构。它显示了模型中的类、类的内部结构以及它们与其他类的关系。类图是面向对象建模的主要组成部分,用于对系统的词汇进行建模、对简单的协作进行建模以及对逻辑数据库模式进行建模。类图的基本元素包括类、接口以及它们之间的关系,这些元素共同构成了系统的静态结构模型。 总结: 1.静态图、

斯坦福UE4 C++课学习补充25:寻路EQS

文章目录 一、创建EQS二、修改行为树三、查询上下文 一、创建EQS 场景查询系统EQS:可用于收集场景相关的数据。然后该系统可以使用生成器,通过各种用户定义的测试就这些数据提问,返回符合所提问题类型的最佳项目Item。 EQS的一些使用范例包括:找到最近的回复剂或弹药、判断出威胁最大的敌人,或者找到能看到玩家的视线 参考链接:https://dev.epicgames.c

常规流布局(补充)——WEB开发系列30

CSS(层叠样式表)作为现代网页设计的基础之一,其布局功能一直是开发者关注的重点。了解CSS常规流布局是掌握网页布局的第一步。 一、什么是常规流布局? 常规流布局(Normal Flow Layout)是CSS布局的基础,也是网页布局的默认方式。在常规流中,所有的元素都按照文档中的顺序依次排列。这种布局方式非常直观,可以帮助我们理解各种布局模式的基础。常规流布局包括块级元素(Blo

常见命令(个人补充ing)

先放两个网址 Liunx命令大全 简明Vim练级攻略 Linux 命令参数说明举例chown-R转移文件夹所属用户sudo chown -R androidgit:androidgit androidtest.gitcat追加内容与文件后cat /tmp/id_rsa_lisi.pub >> ~/.ssh/authorized_keyscd进入目录cd /hometail-f将文件内容时时

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程  (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建  (1)处理器类配置  (2)处理器类接受请求  (3)获得请求数据  四.拦截器 (1)关于拦截器: (2)拦截器的实现 一