PHP实现基于栈的后缀表达式求值功能


Posted in PHP onNovember 10, 2017

本文实例讲述了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编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
PHP分页函数代码(简单实用型)
Dec 02 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
Joomla开启SEF的方法
May 04 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
实例化php类时传参的方法分析
Jun 05 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 #PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 #PHP
PHP用函数嵌入网站访问量计数器
Oct 27 #PHP
PHP实现网站访问量计数器
Oct 27 #PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 #PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 #PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 #PHP
You might like
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
VUE重点问题总结
2018/03/19 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
简单解决Python文件中文编码问题
2015/11/22 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python脚本替换指定行实现步骤
2017/07/11 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python交换两个变量的值方法
2019/01/12 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Django如何使用redis作为缓存
2020/05/21 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
python如何绘制疫情图
2020/09/16 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
营业经理岗位职责
2013/11/10 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
Flink 侧流输出源码示例解析
2022/09/23 Servers