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扩展函数
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 PHP
如何在PHP中生成随机数
Jun 04 PHP
PHP中->和=>的意思
Mar 31 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
学习php分页代码实例
2013/10/24 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
BootStrap selectpicker
2016/06/20 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
jquery实现数字输入框
2017/02/22 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
2014年小学教导处工作总结
2014/12/19 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
内勤岗位职责范本
2015/04/13 职场文书
教师节主题班会教案
2015/08/17 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers