表达式求值及转换算法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

后缀表达式求值算法

stack operands;  //运算数栈
while(没到表达式尾)
{scanf("一个运算对象op");if(op is 运算数)operands.push(op);else if(op is 运算符){operand_right = operands.pop();operand_left = operands.pop();result = operand_left op operand_right;operands.push(result);}else{printf("Suffix expression is invalid !");}
}
if(operands.size() == 1)return operands.top();
elseprintf("Suffix expression is invalid!");

前缀表达式求值算法

算法一:从表达式尾部开始处理(从右至左)

伪代码描述:

stack operands;   //运算数栈
while(没到达表达式首)
{scanf("一个运算对象op");if(op is Operand)operands.push(op);else if(op is Operator){operand_left = operands.pop();operand_right = operands.pop();result = operand_left op operand_right;operands.push(result);}else{printf("Prefix expression is invalid!");}
}
if(operands.size() == 1)
{return operands.top();
}
elseprintf("Prefix expression is invalid!");

算法二:从表达式首部开始处理(从左至右)

stack operations;  //运算对象栈,元素既可以是云算法,也可以是运算数
while(没到表达式尾)
{scanf("一个运算对象op");if(op is Operator){operations.push(op);}else if(op is Operand){if(operations.top() is Operator){operations.push(op);}else{while(operations.top() is Operand){operand_right = op;operand_left = operations.pop();operator = operations.pop();op = operand_left operator operand_right;}operations.push(op);}}else{printf("Prefix expression is invalid!");}
}
if(operations.size() == 1)return operations.top();
elseprintf("Prefix expression is invalid!");

中缀表达式转换为后缀表达式算法

stack operators;   //运算符栈
while(没到表达式尾)
{scanf("一个运算对象op");if(op is Operand){printf(op);}else if(op is Operator){if(op 优先级大于 operator.top() && op is not 右括号)operator.push(op);else if(op is 右括号){do{tmp = operators.pop();if(tmp is not 对应左括号){printf(tmp);}else{break;}if(operators.empty()){printf("Infix expression is invalid!");}}while(1);}else{do{tmp = operators.pop();printf(tmp);}while(op 优先级小于 operators.top());operators.push(op);}}else{printf("Infix expression is invalid!");}
}
while(!operators.empty())
{tmp = operators.pop();printf(tmp);
}

中缀表达式转换为前缀表达式算法

从表达式尾部开始处理

stack operators;  //运算符栈stack operations;  //运算对象栈,元素既可以是运算符,也可以是运算数while (没到表达式首){scanf("一个运算对象op");if (op is Operand){operations.push(op);}else if (op is Operator){if (op 优先级大于 operators.top() && op is not 左括号)operators.push(op);else if (op is 左括号){do{tmp = operators.pop();if (tmp is not 对应右括号){operations.push(tmp);}else{break;}if (operators.empty()){printf("Infix expression is invalid!");}}while(1);}else{do{tmp = operators.pop();operations.push(tmp);}while(op 优先级小于 operators.top());operators.push(op);}}else{printf("Infix expression is invalid!");}}while(!operators.empty()){tmp = operators.pop();operations.push(tmp);}while(!operations.empty()){tmp = operations.pop();printf(tmp);}

转载于:https://my.oschina.net/lucusguo/blog/506528

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市

承蒙广大读者的厚爱我的 《iOS实战:传感器卷(Swift版)》京东上市了,欢迎广大读者提出宝贵意见。http://item.jd.com/11760248.html 欢迎关注关东升新浪微博tony_关东升。 关注智捷课堂微信公共平台&#…

带分页的标签

原型图 图片.png重要的实现代码 var getMemo function(pageNo,name){$(#dataDiv).html("");$.ajax({url: basePath "/signIn/set/getSignSetListPage",datatype: json,type: "POST",data: { "pageNo": pageNo,"name":name…

Apache2 部署flask项目

Apache2 部署flask项目 需要安装的插件: apt-get install apache2 apt-get install libapache2-mod-wsgi 在 /etc/apache2/sites-available/ 目录下创建对应的项目配置文件“xxx.conf”,用于项目与Apache2之间的链接(配置文件名自定义):…

[iOS Animation]-CALayer 性能优化实例

2019独角兽企业重金招聘Python工程师标准>>> 一个可用的案例 现在我们已经对Instruments中动画性能工具非常熟悉了,那么可以用它在现实中解决一些实际问题。 我们创建一个简单的显示模拟联系人姓名和头像列表的应用。注意即使把头像图片存在应用本地&…

WordPress 多语言支持(本地化)

https://www.cnblogs.com/ryanzheng/p/8309261.html WordPress 多语言支持(本地化) 本博客将介绍WordPress的多语言制作 首先需要在wp-content目录下创建一个languages文件夹,用于存放语言包文件。 然后在模板目录下的functions.php&…

ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群

前言: 前段时间自己参考网上的文章,梳理了一下基于分布式环境部署的业务系统在解决数据一致性问题上的方案,其中有一个方案是使用ZooKeeper,加之在大数据处理中,ZooKeeper确实起到协调服务的作用,所以利用周末休息时间…

解决SublimeCodeIntel回车换行误打代码

SublimeCodeIntel会自动匹配并联想词汇, 这在换行的时候非常麻烦, 每次点Enter 都会误打出代码, 解决办法分两步:第一步是在Perferences/setting User 中加入 "auto_complete_commit_on_tab": true, 然后看Perferences/KeyBindings Default中 { "keys": [&…

Html5响应式设计与实现广场

由于提出的想法响应式设计,越来越多的网站使用这样的思想。各类大型网站如雨后春笋般涌了出来。例如:小米商城。天猫等。 至于响应式设计的概念等大家能够去百度百度,我这里就不相信解说了。直接为大家带来源代码。用Html5实现响应式的九宫格…

工作问题日志

1. 获取用户请求的路径:HttpServletRequest request (HttpServletRequest) req;String servletPath request.getServletPath(); 2. 相对通用的读文件流的方法(Windows 和 Linux上都可以用):拿到流,然后再去读流中的内…

【j360-boot】Spring-boot系列三(崩溃模式,不是你崩就是电脑崩)

2019独角兽企业重金招聘Python工程师标准>>> j360-boot spring-boot入门工程之j360-boot:(欢迎star、fork) https://github.com/xuminwlt/j360-boot spring-boot官方地址 http://projects.spring.io/spring-boot/ 【j360-boot】Sp…

裸眼3D全攻略3:拍摄3D—瞳距、镜距、视角偏转与空间感

http://sd89.blog.163.com/blog/static/356041322014112532958728/ 3D图片的拍摄,与平面有着全新的不同要求,那就是空间感的表现。 简单来说,空间感是由两条视线分别从左右不同的视角,各自获取物体左右两面的不同信息交汇而产生的…

【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)

作品展示: 0-5: 21题,正确21题,错误21题42题 。小于44格子,都写上,哪怕输入2:8,实际也是5:5 0-10 66题,正确66题,错误66题132题 大于44格子,正确66题抽取44*…

Webpack使用指南

Webpack 是当下最热门的前端资源模块化管理和打包工具。 什么是webpack Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异…

JS--数组和字典

JS--数组和字典 定义数组 var my_array new Array(); 一、JS数组 JavaScript中的数组类似于Python的列表   https://www.cnblogs.com/bigberg/p/9237856.html 1 a [11,22,33,44] 常见功能:  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 obj.length 数…

vue-cli创建项目

vue学习资料 Vue.js官网(https://vuejs.org.cn/) Vue-cli (https://github.com/vuejs/vue-cli) Vue-rescource (https//github.com/vuejs/vue-rescource) Vue-router (https://github.com/vuejs/vue-router) better-scroll (https://github.com/ustbhuan…

通过webbrowser实现js与winform的相互调用

为什么80%的码农都做不了架构师&#xff1f;>>> 1客户端页面 <!DOCTYPE html><html xmlns"http://www.w3.org/1999/xhtml"> <head><meta charset"utf-8" /><title></title> </head> <body>&l…

Visual Studio 2012中使用GitHub

前言 一直以来都想使用Git来管理自己平时积累的小代码&#xff0c;就是除了工作之外的代码了。有时候自己搞个小代码&#xff0c;在公司写了&#xff0c;就要通过U盘或者网盘等等 一系列工具进行Copy&#xff0c;然后回家才能继续在原来的基础上作业。Copy来Copy去的麻烦不说&a…

NOIP2015 D1 解题报告

T1 神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵&#xff1a;它由数字1,2,3,……,N*N构成&#xff0c;且每行、每列及两条对角线上的数字之和都相同。 当N为奇数时&#xff0c;我们可以通过以下方法构建一个幻方&#xff1a; 首先将1写在第一行的中间。 之后&#xff0c;按如…

spring容器扩展功能之一:spring加载ApplicationContext.xml的四种方式

容器加载Bean的常见两个类ApplicationContext和BeanFactory&#xff0c; 一、首先&#xff0c;看看spring中加载配置在xml中的Bean对象到容器 spring 中加载xml配置文件的方式,好像有4种, xml是最常见的spring 应用系统配置源。Spring中的几种容器都支持使用xml装配bean&#x…

软工随堂练 找出和值最大的子矩阵 尹亚男 赵静娜

题目&#xff1a;从m*n矩阵中找出元素和最大的子矩阵。 分析&#xff1a;此题是可看做节课求和值最大子数组的一种延伸。但如果按之前的枚举法显然太过麻烦&#xff0c;复杂度为O&#xff08;n^4&#xff09;。那么有没有更好的方法呢&#xff1f; 我们拿出上一道题做了进一步的…