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中文汉字验证码
Apr 08 PHP
php图片验证码代码
Mar 27 PHP
php _autoload自动加载类与机制分析
Feb 10 PHP
浅谈php扩展imagick
Jun 02 PHP
PHP远程采集图片详细教程
Jul 01 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
PHP连接操作access数据库实例
Mar 30 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 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和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
PHP中header用法小结
2016/05/23 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
采用call方式实现js继承
2014/05/20 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
python通过smpt发送邮件的方法
2015/04/30 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
环境科学专业研究生求职信
2013/10/02 职场文书
大学生物业管理求职信
2013/10/24 职场文书
司马光教学反思
2014/02/01 职场文书
个人授权委托书
2014/04/03 职场文书
团队队名口号大全
2014/06/06 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
安全承诺书
2015/01/19 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python