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也可以?成Shell Script
Oct 09 PHP
?生?D片??C字串
Dec 06 PHP
php项目打包方法
Feb 18 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
php+mysql实现数据库随机重排实例
Oct 17 PHP
php实现异步数据调用的方法
Dec 24 PHP
PHP单例模式简单用法示例
Jun 23 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
漂亮的thinkphp 跳转页封装示例
Oct 16 PHP
PHP 超级全局变量相关总结
Jun 30 PHP
基于PHP实现发微博动态代码实例
Dec 11 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python中的随机函数random的用法示例
2018/01/27 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python中的数据结构比较
2019/05/13 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
团委书记的竞聘演讲稿
2014/04/24 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
Python+Tkinter打造签名设计工具
2022/04/01 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers