中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)
2016-04-11 17:27
781 查看
中缀表达式:就是我通常用的算术或逻辑公式;
后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级;
如,(2+1)*3 转换后,2 1 + 3 *
1、人工实现转换
如中缀表达式:a+b*c-(d+e)
(1)、按照运算符优先级对所有运算单位加括号,式子变成:((a+(b*c))-(d+e))
(2)、把运算符号移动到对应括号后面,变成:((a(bc)*)+(de)+)-
(3)、把括号去掉就变成后缀表达式了:abc*+de+-
2、中缀转后缀算法:
如中缀表达式:(1+2)*((8-2)/(7-4))
(1)、设立一个空栈,用于存放运算符
(2)、从左向右扫描,如果是操作数,直接输出;如果遇到左括号直接进栈,如果遇到右括号,则一直退栈,直到遇到左括号;如果是运算符,要和栈顶运算符比较(此处运算符比较就是+、-、*、/四则运算比较),比栈顶级别高,进栈,否则输出栈顶运算符(比较一次),然后运算符进栈
(3)、如果栈中剩有运算符,则依序出栈
例子:
后缀表达式运算
后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级;
如,(2+1)*3 转换后,2 1 + 3 *
1、人工实现转换
如中缀表达式:a+b*c-(d+e)
(1)、按照运算符优先级对所有运算单位加括号,式子变成:((a+(b*c))-(d+e))
(2)、把运算符号移动到对应括号后面,变成:((a(bc)*)+(de)+)-
(3)、把括号去掉就变成后缀表达式了:abc*+de+-
2、中缀转后缀算法:
如中缀表达式:(1+2)*((8-2)/(7-4))
(1)、设立一个空栈,用于存放运算符
(2)、从左向右扫描,如果是操作数,直接输出;如果遇到左括号直接进栈,如果遇到右括号,则一直退栈,直到遇到左括号;如果是运算符,要和栈顶运算符比较(此处运算符比较就是+、-、*、/四则运算比较),比栈顶级别高,进栈,否则输出栈顶运算符(比较一次),然后运算符进栈
(3)、如果栈中剩有运算符,则依序出栈
例子:
function calculatePostfix(postfixExp) { var arr = []; for (var i = 0; i < postfixExp.length; i++) { var curVal = postfixExp[i]; if(curVal==' '){ continue; } switch (curVal) { case '+': { var pop1 = arr.pop(); var pop2 = arr.pop(); var res=parseFloat(pop2)+parseFloat(pop1); arr.push(res); break; } case '-': { var pop1 = arr.pop(); var pop2 = arr.pop(); var res=parseFloat(pop2)-parseFloat(pop1); arr.push(res); break; } case '*': { var pop1 = arr.pop(); var pop2 = arr.pop(); var res=parseFloat(pop2)*parseFloat(pop1); arr.push(res); break; } case '/': { var pop1 = arr.pop(); var pop2 = arr.pop(); var res=parseFloat(pop2)/parseFloat(pop1); arr.push(res); break; } default : { arr.push(curVal); break; } } } return arr[0]; }
后缀表达式运算
相关文章推荐
- Javascript 函数和模块定义
- JSON数据解析
- 分页插件jPages.js的使用示例
- JS+canvas实现人机大战之五子棋
- An interesting kind of JavaScript memory leak
- JSP 生命周期
- js对象数组(JSON) 根据某个共同字段 分组
- js对象数组(JSON) 根据某个共同字段 分组
- JS:offsetWidth\offsetleft 等图文解释
- WebSocket的JavaScript例子
- json字符串和对象的相互转化
- js 处理日期格式化
- 笔记练习:《Javascript入门经典(第5版)》page175_14.11_Practice
- Javascript模块化编程(一):模块的写法
- Javascript 转换&#x的unicode编码字符
- js 之 this的用法
- 对Json文件的解析(读取)
- 对象信息生成Json串
- JSP - WEB组件关系(请求转发/重定向/包含)
- 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, xxx”或它的某一个依赖项