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 相关文章推荐
杏林同学录(二)
Oct 09 PHP
php生成EXCEL的东东
Oct 09 PHP
PHP安全配置详细说明
Sep 26 PHP
深入PHP curl参数的详解
Jun 17 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
php常用文件操作函数汇总
Nov 22 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
10个php函数实用却不常见
Oct 13 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
PHP函数rtrim()使用中的怪异现象分析
Feb 24 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 #PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 #PHP
PHP简单实现循环链表功能示例
Nov 10 #PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 #PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 #PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 #PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 #PHP
You might like
?繁体转换的class
2006/10/09 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
深入解析Python中的lambda表达式的用法
2015/08/28 Python
python入门教程之识别验证码
2017/03/04 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
给我一面国旗 python帮你实现
2019/09/30 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
模具设计与制造专业推荐信
2014/02/16 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
装修活动策划方案
2014/08/27 职场文书
婚前协议书范本两则
2014/10/16 职场文书
乌镇导游词
2015/02/02 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS