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 相关文章推荐
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
PHP编程风格规范分享
Jan 15 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP基本语法
Mar 31 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+javascript模拟Matrix画面
2006/10/09 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
药学专业大专生的自我评价
2013/12/12 职场文书
小学生常见病防治方案
2014/06/06 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
关于迟到的检讨书
2015/05/06 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
python中24小时制转换为12小时制的方法
2021/06/18 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python