//后缀表达式求值 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); }
相关推荐
在编程领域,表达式求值是计算数学或逻辑表达式以获取结果的过程。在这个场景中,我们关注的是如何使用栈数据结构来实现这个功能。栈是一种后进先出(LIFO)的数据结构,非常适合处理括号匹配和运算符优先级问题,这...
字符串表达式求值 输入类似1+2+3,6*5/7的字符串,计算出值
在计算机科学中,表达式求值是编程语言理论的一个核心概念,主要涉及如何解析和计算数学或逻辑表达式。这个过程通常分为两个阶段:语法分析(解析)和语义分析(求值)。以下是对表达式求值算法、代码实现、报告编写...
在IT领域,表达式求值是一项基础且重要的任务,它涉及到计算机如何解析和计算数学或逻辑表达式。本文将深入探讨一个用C语言实现的表达式求值程序,该程序特别强调了对浮点数(float型)和乘方运算的支持。 首先,...
在本项目中,我们主要关注的是使用C++编程语言实现表达式求值的功能。这是一个典型的数据结构与算法问题,尤其适用于计算机科学与信息技术专业的学生进行实践学习。C++是一种强大的编程语言,它提供了丰富的特性来...
### 表达式求值与二叉树的关系 在计算机科学中,利用二叉树来表示和求解表达式是一种常见的方法。这种方法的核心是通过构建一个以运算符为节点、以操作数为叶子节点的二叉树结构,来实现表达式的解析和计算。 ####...
这篇实验报告主要探讨了如何利用栈来实现算术表达式的求值,这对于初学者理解程序设计语言中的表达式计算机制非常有帮助。报告中提到,表达式计算是程序设计语言的基础,而这个问题可以通过将数学表达式转化为后缀...
在C++编程中,表达式求值是一个常见的需求,特别是在解析和执行数学或逻辑表达式时。本项目采用类模板技术实现了一个表达式求值器,这是一个强大的工具,可以帮助我们处理复杂的计算任务。下面我们将详细探讨这个...
根据给定的文件信息,我们可以总结出以下关于“后缀表达式求值”的详细知识点,主要涉及C语言在数据结构中的应用,特别是栈的应用来解析和计算后缀表达式。 ### 1. 后缀表达式的概念 后缀表达式,也称为逆波兰表示...
《Siliphen的表达式求值实践工程代码》是一个关于计算机科学中表达式求值的实践项目,这个项目深入探讨了如何在编程中实现表达式的计算。表达式求值是计算机科学的基础,尤其是在编译原理、解释器设计以及计算理论等...
表达式求值实验报告 数据结构是计算机科学中的一门重要课程,涉及到算法、数据存储、表达式求值等多个方面。在本次实验报告中,我们将着重于表达式求值的实现,包括数据结构设计、算法设计、ADT 描述等方面。 1. ...
在Java编程语言中,表达式求值是一项基本且重要的任务,尤其在动态计算、脚本解析或编译器实现等领域。"Java表达式求值2.0"可能是指一个优化过的版本,用于更高效地处理Java中的数学或逻辑表达式。这个版本可能是...
### 数据结构与表达式求值知识点解析 #### 一、问题背景及定义 在计算机科学领域,**表达式求值**是一项基础而重要的任务。它涉及到如何解析并计算由数字和运算符组成的数学表达式的值。例如,对于表达式 `3 * (9 ...
数据结构课程设计算数表达式求值 在数据结构课程设计中,算数表达式求值是一个非常重要的主题。本文将详细介绍算数表达式求值的实现过程,包括课程设计的介绍、课程设计的原理、数据结构分析、调试与分析等方面。 ...
《表达式求值程序——深入理解.NET MFC与VC++实现》 在计算机科学中,表达式求值是计算编程语言中的一个基本概念,它涉及将符号表达式转化为实际值的过程。本文将深入探讨如何使用.NET框架、MFC(Microsoft ...
【表达式求值】是计算机科学中的一个重要概念,特别是在编译原理和数据结构课程中。这个过程涉及到将一个数学表达式转换成等价的计算形式,以便计算机可以准确地求解其值。以下是对该主题的详细说明: 一、算术...
### 用栈解决表达式求值问题(数据结构) #### 表达式求值与栈的应用 在计算机科学中,表达式的求值是一项常见的任务,尤其是在解析数学公式、执行编程语言中的运算等方面。通常,这类任务涉及到将一个复杂的数学...
在这个话题中,我们关注的是“表达式求值”,一个常见的数据结构应用,特别是中缀表达式到后缀表达式的转换以及其求值过程。中缀表达式是我们日常使用的数学表达式形式,如2 + 3 * 4,而后缀表达式,也称为逆波兰...
栈实现表达式求值
《数据结构_课程设计》表达式求值_实验报告详细解析 本次实验是关于数据结构课程设计的一个项目,主要目标是实现一个算术表达式的求值程序,利用栈这一数据结构来处理运算符的优先级,从而计算出表达式的正确结果。...