php表达式求值,PHP实现基于栈的后缀表达式求值功能
本文实例讲述了PHP实现基于栈的后缀表达式求值功能。分享给大家供大家参考,具体如下:
后缀表达式概述
后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。
实现代码:
class Stack{
public $stack;
public $stack_top;
public function __construct(){
$this->stack=array();
$this->stack_top=-1;
}
public function push($data){
$this->stack[]=$data;
$this->stack_top++;
}
public function pop(){
if(!$this->is_empty())
{
$this->stack_top--;
return array_pop($this->stack);
}else
{
echo "stack is empty";
}
}
public function is_empty(){
if($this->stack_top==-1)
return true;
}
}
$string="1243-*+63/-";
$arrs=str_split($string);
echo var_export($arrs);
$stack=new Stack();
foreach($arrs as $arr){
switch($arr){
case "+":$one=$stack->pop();$two=$stack->pop();$temp=$two + $one;$stack->push($temp);break;
case "-":$one=$stack->pop();$two=$stack->pop();$temp=$two - $one;$stack->push($temp);break;
case "*":$one=$stack->pop();$two=$stack->pop();$temp=$two * $one;$stack->push($temp);break;
case "/":$one=$stack->pop();$two=$stack->pop();$temp=$two / $one;$stack->push($temp);break;
default:$stack->push($arr);
}
}
echo $stack->pop();
?>
运行结果:
array (
0 => '1',
1 => '2',
2 => '4',
3 => '3',
4 => '-',
5 => '*',
6 => '+',
7 => '6',
8 => '3',
9 => '/',
10 => '-',
)1
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
php表达式求值,PHP实现基于栈的后缀表达式求值功能相关推荐
- 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...
- 北京林业大学数据结构实验二 基于栈的算术表达式求值算法
第1关:基于栈的中缀算术表达式求值 参见课本P75 例3.3 #include <iostream> #include<iomanip>#define MAXSIZE 100 ...
- 有趣的数据结构算法10——后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果
有趣的数据结构算法10--后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果 解题思路 实现代码 GITHUB下载连接 在前一天已经利用栈完成2进制到8进制的转换.但是栈的应用方面还有很多,本次我将 ...
- 用栈实现后缀表达式求解问题
一.问题概述: 人们经常书写的数学表达式属于中缀表达式,今天要解决的是,后缀表达式的求解问题. 如下图分别为举例的中缀表达式和后缀表达式: 二.解决思路 我们用栈存储后缀表达式中的数据部分,当遇到操作 ...
- 中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么? ABCDF+-*E/+ ABDF+C-*E/+ ABDF+C*-E/+ ABDF+C*-E+/ 正确答案:A A+B*(C-(D+ ...
- python前缀表达式求值_python数据结构与算法 11 后缀表达式求值
从本节开始,删除原版的英文,直接发译后的文稿. 后缀表达式求值 栈的最一个应用例子,计算一个后缀表达式的值.这个例子中仍然用栈的数据结构.不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中 ...
- 数据结构——用栈实现后缀表达式的计算
后缀表达式计算: " A B - C D E / F - * + G + " 在运算过程中,首先创建一个 "操作数栈" . 1.从左向右扫描,扫描到一个操作数, ...
- 【Java】基于栈的算术表达式求值
定义异常类 public class ExpressionException extends RuntimeException {private static final long serialVer ...
- 数值分析方程求根实验matlab,基于matlab的数值分析( 非线性方程求根)上机实验报告1...
数值分析试验报告 非线性方程求根 二分法解方程 1. 题目:用二分法求方程0133 =--x x 的所有根 2. 方法:二分法 3. 程序 function x=erfenfa(a,b) if (a* ...
最新文章
- python中的异常分类
- 2021年JVM生态中哪些是流行的、热门的、趋势是什么
- 利用ajax技术 实现用户注册。
- QT多线程run函数不能使用信号与槽
- asp.net学习笔记·文件上传
- 最易懂的layui分页
- 王者荣耀显示聊天服务器异常,王者荣耀功能存在异常暂时关闭怎么回事 解决办法...
- 【比赛分享】互联网新闻情感分析复赛top8(8/2745)解决方案及总结
- 最强白嫖指南---推荐11个珍藏多年的网站!
- java gbk转机内码_GBK/GB2312编码问题分析以及java获取汉字国标码
- 华为海思K3平台总体特性
- 网络共享显示网络设备没有其他计算机,Win10如何寻找同一网络下的其他设备 网络发现功能无法使用怎么办...
- java计算费用类题目
- VR全景制作教程|VR全景拍摄和制作竟如此简单
- 重庆大学计算机学院研究生奖学金评定准则,重庆大学经管学硕士生奖学金评定办法(试行).doc...
- 英语四级口语测试软件,2021年大学英语四级口语测试题
- P5167 xtq的神笔
- 6个越南主流社交媒体软件简单介绍
- LabVIEW学习分享(2)
- 国家、省、市三级联动下拉列表