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 MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
php5 apache 2.2 webservice 创建与配置(java)
Jan 27 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
深入理解PHP内核(一)
Nov 10 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
详解PHP中curl_multi并发的实现
Jun 08 PHP
PHP实现简易用户登录系统
Jul 10 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
php echo 输出字符串函数详解
2010/05/13 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
java解析json方法总结
2019/05/16 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
wxPython学习之主框架实例
2014/09/28 Python
python同时给两个收件人发送邮件的方法
2015/04/30 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python实现猜拳游戏
2020/03/04 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
犯错检讨书
2014/02/21 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
公司经营目标责任书
2015/01/29 职场文书
追讨欠款律师函
2015/06/24 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
python数字类型和占位符详情
2022/03/13 Python