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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
UCenter Home二次开发指南
May 28 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
php实现的短网址算法分享
Jun 20 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
WordPress中限制非管理员用户在文章后只能评论一次
Dec 31 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
PHP中常用的魔术方法
Apr 28 PHP
ThinkPHP实现登录退出功能
Jun 29 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 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使HTML标签自动补全闭合函数代码
2012/10/04 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
jquery延迟对象解析
2016/10/26 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
对Python3 序列解包详解
2019/02/16 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
爬山的活动方案
2014/08/16 职场文书
旅游投诉信范文
2015/07/02 职场文书