(数据结构)前缀,后缀以及中缀表达式
中缀表达式(中缀记法)
中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。
前缀表达式(前缀记法、波兰式)
前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面。为纪念其发明者波兰数学家Jan Lukasiewicz,前缀表达式也称为“波兰式”。例如,- 1 + 2 3,它等价于1-(2+3)。
后缀表达式(后缀记法、逆波兰式)
后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。
------------------前缀表达式、后缀表达式转换为中缀表达式的方法--------运算符前移或后移------------
这里我给出一个中缀表达式
1 |
|
第一步:按照运算符的优先级对所有的运算单位加括号
式子变成:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
前缀:把运算符号移动到对应的括号前面
则变成:-( +(a *(bc)) +(de))
把括号去掉:-+a*bc+de 前缀式子出现
后缀:把运算符号移动到对应的括号后面
则变成:((a(bc)* )+ (de)+ )-
把括号去掉:abc*+de+- 后缀式子出现
发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。
<------------------------------计算机如何计算前缀表达式或者后缀表达式------------------------>
虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。
我们来看一下,在计算机的角度来看,如何计算前缀或后缀表达式?
前缀表达式的计算机求值
前缀表达式,操作符在前边,也就是左边,所以计算机计算的时候会从右到左扫描表达式。
从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果
例如:- × + 3 4 5 6
- 从右至左扫描,将6、5、4、3压入堆栈
- 遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈
- 接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈
- 最后是-运算符,计算出35-6的值,即29,由此得出最终结果
后缀表达式的计算机求值
与前缀表达式类似,只是顺序是从左至右:
从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果
例如后缀表达式“3 4 + 5 × 6 -”:
- 从左至右扫描,将3和4压入堆栈;
- 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;
- 将5入栈;
- 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;
- 将6入栈;
- 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。
---------------------------结束------------谢谢,欢迎提出宝贵意见---------------------------
(数据结构)前缀,后缀以及中缀表达式相关推荐
- 255.0.0.0子网掩码相应的cidr前缀表示法是?_六十四、前缀,后缀,中缀表达式转化求值问题...
「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. 「---- Runsen」 ❞ 算法,一门既不容易入门,也不容易精通的学问. 上次介 ...
- 六十四、前缀,后缀,中缀表达式转化求值问题
@Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 算法,一门既不容易入门,也不容易精通的学问. 上次介绍如何利用栈实现 ...
- 数据结构前缀,后缀,中缀表达式
[cpp] view plain copy [cpp] view plain copy <span style="color: rgb(51, 51, 51); font-fa ...
- [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算
中缀.后缀表达式定义 中缀表达式又称波兰式,有利于人们阅读与表达. 后缀表达式又称逆波兰式,有利于机器进行运算. 例题1: 中缀表达式:(a+b+c*d) /e 首先让我们来看一下运算符对应的优先级, ...
- 【数据结构与算法】中缀表达式 - 后缀表达式 - 求值
中缀转后缀 #include <stdio.h> #include <stdlib.h>#define STACK_INIT_SIZE 20 #define STACKINCR ...
- 数据结构作业--计算器(用中缀表达式实现表达式树)
Tree.h #ifndef TREE_H_INCLUDED #define TREE_H_INCLUDED #include <iostream> #include "stdl ...
- 后缀转中缀表达式_中缀转后缀表达式代码实现(下)及计算器完整版
南故笙烟:中缀表达式转为后缀表达式zhuanlan.zhihu.com 思路分析 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将其压入s2 4 ...
- python中缀转后缀_中缀表达式转后缀表达式Python
中缀表达式转后缀表达式参考的文章就是直接给出了算法,但是算法如何推导出来的还没有弄明白,简单记录下我自己的理解,强行解释一下. 后缀表达式就是操作符再操作数的后面,并且计算机能够根据简单的优先级就能进 ...
- 后缀表达式转中缀表达式
中缀转后缀:中缀表达式转换为后缀表达式 大概意思就是:遇到数字就输出,遇到符号(包括括号)就压入栈,如果当前符号优先级比栈顶的低,就把栈顶的符号输出,平级的也都输出,到左括号(优先级最高为止),然后当 ...
最新文章
- arrays must all be same length
- 33、springboot整合springcloud
- Spring 极速集成注解 Redis 实践
- 多线程编程:阻塞、并发队列的使用总结
- Java原子类中CAS的底层实现,java高级面试笔试题
- java 浮点型 除零_Java-非零整数除以10等于0.0浮点?
- 数据库系统原理笔记:关系数据库设计
- 分布式微服务云架构电子商务平台
- MATLAB 2017 b 安装+下载+破解(win10,linux,mac)
- 个性化的CRM具备的功能有哪些
- VMWare虚拟机开启失败(模块“Disk“启动失败)
- Linux系统中一些目录和文件的详细解释(参照RHEL5.4)
- 08 python 集合
- 集合及集合的交,并与差
- 关于许嵩很有意境的歌词
- 项目经理如何提升核心竞争力,给自己增值
- python微博评论情感分析_基于Python的微博情感分析系统设计
- 中国大学moocpython_中国大学MOOC(慕课)_Python 语言程序设计_测试题及答案
- 精读《极客公园 IFX - 上》
- 教你如何秒杀12306,JAVA程序抢票成功 分享 附截图
热门文章
- android 编译之后黑屏_抖音BoostMultiDex:Android低版本上首次启动时间减少80%(一)...
- Cookie会话技术
- 简练软考知识点整理-控制成本过程
- Codeforces Round #441 D. Sorting the Coins(模拟)
- Python文件操作-文件的增删改查
- PHP图形图像的典型应用 --常用图像的应用(验证码)
- xml学习4-dtd
- 计算机java考试_2017年计算机java考试试题
- java system.setproperties_在JAVA中 System.getProperty 和 System.setProperty 方法.
- 回调函数 —— 借助中间通用函数(形参里有函数指针,实现函数注册)调用不同的回调函数 (多态/分层)