//后缀表达式求值 function calculate($equation = ''){ if(empty($equation)){ return 0; } //声明各个符号的算法函数 $operations = array('+' => function($param1, $param2){ return $param1 + $param2; }, '-' => function($param1, $param2){ return $param1 - $param2; }, '*' => function($param1, $param2){ return $param1 * $param2; }, '/' => function($param1, $param2){ return $param1 / $param2; }); //将表达式用空格分隔为数组 $equationArr = explode(' ', $equation); $numStack = array(); $result = 0; //循环数组 foreach($equationArr as $c){ //如果是符号 if(in_array($c, array_keys($operations))){ $param1 = (int)array_pop($numStack); $param2 = (int)array_pop($numStack); $subEquation = $operations[$c]($param2, $param1); array_push($numStack, $subEquation); //如果是数字,将本数入栈 }else{ array_push($numStack, intval($c)); } } return array_pop($numStack); } $result = calculate('2 3 5 7 + - *'); var_dump($result);
//( ( 1 + 2 ) * 3 ) * 3 + 4 / 2 //转换中缀表达式为后缀表达式 function infixToPosfixNotation($equation = ''){ if(empty($equation)){ return false; } $operations = array('+' => array('p' => 1), '-' => array('p' => 1), '*' => array('p' => 3) , '/' => array('p' => 2),'(' => array('p' =>0), ')' => array('p' => 0), ); $numStack = array(); $operStack = array(); $equationArr = explode(' ', $equation); foreach($equationArr as $c){ //将优先级高的操作符放到操作符栈顶 if(in_array($c, array_keys($operations))){ //如果操作符栈为空 switch($c){ case '(': array_push($operStack, $c); break; case ')': //如果是右括号 while(($popOper = end($operStack)) && $popOper != '('){ array_push($numStack, array_pop($operStack)); } //去除左括号 array_pop($operStack); break; default: $popOper = end($operStack); while(($popOper = end($operStack)) && $popOper != '(' && $operations[$popOper]['p'] > $operations[$c]['p']){ array_push($numStack, array_pop($operStack)); }//压入符号栈 array_push($operStack, $c); break; } }else{ array_push($numStack, intval($c)); } } while($popOper = array_pop($operStack)){ array_push($numStack, $popOper); } return implode(' ', $numStack); }
相关推荐
非常完美的表达式求值课程设计非常完美的表达式求值课程设计非常完美的表达式求值课程设计非常完美的表达式求值课程设计非常完美的表达式求值课程设计非常完美的表达式求值课程设计非常完美的表达式求值课程设计非常...
利用栈编写表达式求值程序:输入含有“+”、“-”、“*”、“/”四则运算的表达式,其中负数要用(0-正数)表示,并以=结束。要求输出表达式的值(两运算符号的优先关系见教材表3.1)。此题目可选做。 Input 第一...
字符串表达式求值 输入类似1+2+3,6*5/7的字符串,计算出值
C++实现表达式求值 本实验要求设计一个算术表达式求值的程序,该程序必须可以接受包含(,),+,-,*,/,%,和^(求幂运算符,a^b=ab )的中缀表达式,并求出结果。如果表达式正确,则输出表达式的结果;如果表达式非法...
表达式求值
数据结构栈实现表达式求值数据结构栈实现表达式求值数据结构栈实现表达式求值数据结构栈实现表达式求值
算术表达式求值算术表达式求值算术表达式求值算术表达式求值
表达式求值 算法 代码 报告 流程图表达式求值 算法 代码 报告 流程图表达式求值 算法 代码 报告 流程图
用栈的方法实现表达式求值,代码结构清晰,很容易读懂,适合初学者学习,100%原装代码。
实验题目: 基于栈的算术表达式求值算法 实验环境: 学习完了数据结构第三章内容栈和队列 实验目的: 1.掌握栈的定义及实现; 2.掌握利用栈求解算术表达式的方法。 实验内容: 通过修改完善教材中的算法...
栈实现表达式求值
表达式求值(中缀变前缀,中缀变后缀,前缀求值,后缀求值) 任务调度(基于时间,优先级)
表达式求值程序,希望可以给在学习C语言的童鞋们提供一些帮助。
表达式求值,用二叉树来表示以后,进行遍历求解。
严蔚敏数据结构 表达式求值 c语言实现 符号优先级
C++用栈实现表达式求值,经过验收的,可以运行,没有问题
表达式求值,用栈实现,C++,支持符号、括号、以及出错处理,程序健壮性应该比较好,本人自己编写,上传的压缩包中有一个运行环境为VS2005,另一个运行环境为VC6.0的源文件,可根据自己电脑的运行环境自行选择
数据结构 严蔚敏 表达式求值 c代码实现
该程序很好实现了算术表达式求值,支持+、-、*、/,以=结束,符合正常表达式。
采用对文件的操作。和很多表达式求值的程序相比本程序最大特点是成功地解决了对float型和乘方的运算。