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获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
php max_execution_time执行时间问题
Jul 17 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
PHP实现批量删除(封装)
Apr 28 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
详解PHP用mb_string处理windows中文字符
May 26 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加密解密函数authcode的用法详细解析
2013/10/28 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
JavaScript生成图形验证码
2020/08/24 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
python进行两个表格对比的方法
2018/06/27 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
解决yum对python依赖版本问题
2019/07/05 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
Python3 合并二叉树的实现
2019/09/30 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
建筑施工员岗位职责
2013/11/26 职场文书
送货司机岗位职责
2013/12/11 职场文书
幼儿园教师考核制度
2014/02/01 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
志愿者活动总结范文
2014/04/26 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书