利用逆波兰表达式求算数表达式的值

2024-05-05 05:58
文章标签 表达式 波兰 算数

本文主要是介绍利用逆波兰表达式求算数表达式的值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算数表达式即中缀表达式,而逆波兰表达式即为后缀表达式。
例如:
中缀表达式:  2+3*8+9-(1+4)/2 =
后缀表达式:  2 3 8 * 9 1 4 + 2 / - + + =
而这两者之间的区别:前者是由人来计算的,比较直观,而对于机器来说,后者更加的快速,而且还去掉了括号。
后缀表达式的运算规则:从左至右,遇到运算符则将前面两值进行运算:
例如:2 3 8* 的时候,等价于 2 3*8 即 2 24 
原式变成了2 249 1 4 + 2/ - + +
如何将中缀表达式转换为后缀表达式?
假设中缀表达式为centerE 设得到后缀表达式为behindE 在转化过程中我们还需要一个栈 设为 tempS
转换规则是:
   从centerE取出一个元素A,
   如果是数字则加入到behindE中;
  如果是运算符,将操作符A与操作符堆栈tempS栈顶的运算符的优先关系相比较;
   如果,优先关系高于temoS栈顶的运算符,则将该运算符压入tempE;
  倘若不是(低于或等于)的话,则将栈tempE栈顶的运算符从栈中弹出保存到behindE,重复此步骤,直到操作符A压入栈tempE。(对于+、-来说,把tempE全部弹出,然后把A压入tempE中)
如果是左括号"(",则压入栈tempE;(注意,"("将之后的运算符的优先级与之前tempE中运算符的优先级隔开)
如果是右括号")",则栈tempE弹出操作符并加入到behindE中,直到弹出左括号"(";
  重复步骤2中的操作,所有元素处理完毕后将堆栈tempE弹出操作符并加入到behindE中;
这样中缀式表示的简单算术表达式转化为逆波兰表达式所表示的简单算术表式。

这篇关于利用逆波兰表达式求算数表达式的值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python19 lambda表达式

在 Python 中,lambda 表达式是一个小型匿名函数,通常用于实现简单、单行的函数。lambda 函数可以接受任意数量的参数,但只能有一个表达式。 基本语法: lambda arguments: expression 这里,arguments 是传递给 lambda 的参数,expression 是关于这些参数的表达式,它的计算结果就是 lambda 函数的返回值。 使用

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

【Qt笔记①】帮助文档、窗口、按钮、信号和槽、lambda表达式

学习第一天:2024-3-9 文章目录 Qt creator 快捷键帮助文档默认生成的main.cpp逐行解释核心类帮助文档的查阅方法-①代码创建按钮第一个第二个对窗口的其他设置 对象树窗口坐标系信号和槽(优点:松散耦合)帮助文档的查阅方法-②找信号函数的方法找槽函数的方法 自定义信号和槽 lambda表达式练习MenuTool Qt creator 快捷键 运行:ctrl

jsp脚本、jsp声明、jsp表达式

<strong><span style="font-size:14px;">jsp脚本 </span></strong><%out.println("这句将输出在浏览器里面,是jsp脚本"); %><%System.out.println("这句将输出在控制台console而不会在浏览器里面输出且查看源代码这一句也是隐藏的"); %> jsp声明变量,方法的格式<%! xxx;%> 举

SQL Plu计算算数表达式及SQL Plus下清屏快捷键

用PL/SQL数据库语言计算sqrt(58+25*3+(19-9)^2)的值 SQL Plus下清屏快捷键是host cls或者 clear screen PL/SQL计算乘方是2个*号:

js函数声明与函数表达式的区别

在JavaScript中,函数可以通过函数声明和函数表达式两种方式进行定义。 函数声明是通过关键字function和函数名来定义的,例如: function add(a, b) {return a + b;} 函数表达式是将函数赋值给一个变量或者存储在一个对象的属性中,例如: var subtract = function(a, b) {return a - b;}; 两

学懂C#编程:常用高级技术——学会Lambda表达式的应用(二)

上一篇介绍了Lambda基础的知识,接着我们通过讲解Lambda的几种应用场景来彻底学懂Lambda在编程中的应用。 Lambda表达式在C#中非常灵活,可以用在多种场合。以下是一些Lambda表达式示例,帮助你更全面地理解其用途: 1. 数组过滤(使用Where) int[] numbers = { 1, 2, 3, 4, 5, 6 };var evenNumbers = numbers

使用 C++11 Lambda 表达式在 Qt 中连接信号与槽

在 Qt 使用 C++11 引入的 lambda 表达式来简化信号与槽的连接已经成为一种不错的选择。本文将通过一个简单的例子来展示如何使用 lambda 表达式来连接 QAction 的信号与槽。 传统的连接方式 首先,看看传统的连接方式: QAction* action = foo->addAction(tr("Some Action"));connect(action, SIGNAL(

【408考点之数据结构】表达式求值和括号匹配

表达式求值和括号匹配 表达式求值 表达式求值是计算机科学中的一个基本问题,涉及将数学表达式转换为计算机可以理解和处理的形式。通常,我们使用栈来辅助求值过程,特别是在处理中缀表达式转后缀表达式和后缀表达式求值时。 中缀表达式转后缀表达式 中缀表达式(如a + b * c)是我们通常书写数学表达式的形式。为了方便计算机处理,我们将其转换为后缀表达式(逆波兰表达式,RPN)。转换过程如下: 扫

表达式求值(无括号、无空格、每个数0-9、有运算符优先级)

/*表达式求值(无括号、无空格、每个数0-9、有运算符优先级)简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注1、表达式只含 +, -, *, / 四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/