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 水平的题目
May 30 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
PHP的PDO操作简单示例
Mar 30 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
php实现查询功能(数据访问)
May 23 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 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输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php共享内存段示例分享
2014/01/20 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
Python中强大的命令行库click入门教程
2016/12/26 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
numpy.array 操作使用简单总结
2019/11/08 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
Oracle性能调优原则
2012/05/03 面试题
介绍一下Linux文件的记录形式
2012/04/18 面试题
广告学专业毕业生自荐信
2013/09/24 职场文书
大四学生毕业自荐信
2013/11/07 职场文书
统计员岗位职责
2013/11/14 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
vue打包时去掉所有的console.log
2022/04/10 Vue.js