第十三课、计算器核心解析算法(中)

一、中缀转后缀

1、中缀表达式转后缀表达式的过程类似编译过程

(1)、四则运算表达式中的括号必须匹配

(2)、根据运算符优先级进行转换

(3)、转换后的表达式中没有括号

(4)、转换后可以顺序计算出最后结果

2、转换过程

(1)、当元素e为数字:输出

(2)、当元素e为运算符:

A、与栈顶运算符进行优先级比较

B、小于等于:将栈顶元素输出,转A执行

C、大于:将当前元素e入栈

(3)、当前元素为e为左括号:入栈

(4)、当前元素e为右括号:

A、弹出栈顶元素并输出,直至栈顶元素为左括号

B、将栈顶的左括号从栈中弹出不要

二、关键点:括号匹配算法

(1)、括号成对出现

(2)、左括号必须先于右括号出现

三、小结

(1)、后缀表达式是程序计算复杂表达式的基础

(2)、中缀转后缀是基于栈数据结构的

(3)、转换过程能够发现表达式中的错误

时间: 2024-10-27 10:59:23

第十三课、计算器核心解析算法(中)的相关文章

第14课 计算器核心解析算法(下)

1. 中缀到后缀的手工转换 (1)按优先级给表达式加括号 (2)从内向外将运算符移动对应的括号后面 (3)去括号,即可得到后缀表达式(如下图,图中数字表示转换顺序) 2. 后缀表达式求值 2.1 图解后缀表达式求值过程 (1)从左向右扫描后缀表达式. (2)遇到数字直接进栈 (3)重点在于遇到运算符时,要找到其左右操作数.(此图中有5个运算符,分别是*./.-.*.+) 2.2 求值步骤(利用栈来进行运算,注意栈只用来保存操作数,并不保存操作符) (1)当前元素为数字:进栈 (2)当前元素为运算

QT之计算器核心解析算法

上节我们说到计算机默认的是后缀表达式,那么中缀表达式转后缀表达式的过程就类似于编译过程. 必须得注意这么几个问题:四则运算表达式中的括号必须匹配:根据运算符优先级进行转换:转换后的表达式中没有括号:转换后可以顺序计算出最终结果.下来我们就讲下具体的转换过程:1.当前元素 e 为数字:输出2.当前元素 e 为运算符时:1. 与栈顶运算符进行优先级比较:2.小于等于时将栈顶元素输出,转1:3.大于时将当前元素 e 入栈3.当前元素 e 为左括号:入栈4.当前元素 e 为右括号:1.弹出栈顶元素并输出

计算器核心解析算法(上)

计算机如何读懂四则运算表达式?9.3 + (3 - -0.11) * 5 后缀表达式人类习惯的数学表达式叫做中缀表达式另外,还有一种将运算符放在数字后面的后缀表达式5 + 3——> 5 3 +1 + 2 * 3 ——> 1 2 3 * +9 + (3 - 1) *5 ——> 9 3 1 - 5* + 中缀表达式符合人类的阅读和思维习惯后缀表达式符合计算机的运算方式——消除了中缀表达式中的括号——同时保留中缀表达式中的运算优先级 解决方案1.将中缀表达式进行数字和运算符的分离2.将中缀表达

Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET Web API中的JSON和XML格式化器. 在ASP.NET Web API中,媒体类型格式化器(Media-type Formatter)是一种能够做以下工作的对象: 从HTTP消息体读取CLR(公共语言运行时)对象 将CLR对象写入HTTP消息体 Web API提供了用于JSON和XML的媒体类

智慧解析第08课:《战国策》中的心理学

智慧解析第08课:<战国策>中的心理学,布布扣,bubuko.com

菜鸟学SSH(十三)——Spring容器解析及简单实现

最近一段时间,"容器"两个字一直萦绕在我的耳边,甚至是吃饭.睡觉的时候都在我脑子里蹦来蹦去的.随着这些天一次次的交流.讨论,对于容器的理解也逐渐加深.理论上的东西终归要落实到实践,今天就借助Spring容器实现原理,简单说说吧. 简单的说,Spring就是通过工厂+反射将我们的bean放到它的容器中的,当我们想用某个bean的时候,只需要调用getBean("beanID")方法. 原理简单介绍: Spring容器的原理,其实就是通过解析xml文件,或取到用户配置的

NeHe OpenGL教程 第四十三课:FreeType库

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十三课:FreeType库 在OpenGL中使用FreeType库 使用FreeType库可以创建非常好看的反走样的字体,记住暴雪公司就是使用这个库的,就是那个做魔兽世界的.尝试一下吧,我只告诉你了基本的使用方式,你可以走的更远

QT开发(四十三)——SAX方式解析XML

QT开发(四十三)--SAX方式解析XML 一.SAX简介 SAX是Simple API for XML的简写,是一种解析XML文件的替代方法,不是由W3C官方所提出的标准,是一种事件驱动的XML API,接近于底层,速度较快,但不便于随机访问任意节点. SAX解析的核心是事件处理机制,具有占用内存少,效率高等特点. SAX采用事件机制的方式来解析XML文档.使用SAX解析器对XML文档进行解析时,SAX解析器根本不创建任何对象,只是在遇到XML文档的各种标签如文档开始.元素开始.文本.元素结束

【C++探索之旅】第一部分第十三课:第一部分小测验

内容简介 1.第一部分十三课:第一部分小测验 2.第二部分第一课预告:面向对象初探,string的惊天内幕 第一部分小测验 上一课中,我们学习了指针这个重中之重. 那么,我们第一部分的课程也圆满地落幕了.不过,小编怎么会这么轻易放过你呢?(其实我是善良的社会主义好青年好嘛). 因此,必须来点简单的测试题,检测一下学习的果效.不难的,不要担心. 测试题目 1.C++之父是谁? Birj Tromman Bjarne Stroustrup Barj Grossoup 2.将文本编辑器,编译器和调试器