当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现基于栈的后缀表达式求值功能

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-19 10:08:26 浏览: 评论:0 

这篇文章主要介绍了PHP实现基于栈的后缀表达式求值功能,简单描述了后缀表达式的概念并结合实例形式分析了php使用栈实现后缀表达式求值的相关操作技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现基于栈的后缀表达式求值功能,分享给大家供大家参考,具体如下:

后缀表达式概述

后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。

实现代码:

  1. <?php 
  2. class Stack{ 
  3.   public $stack
  4.   public $stack_top
  5.   public function __construct(){ 
  6.     $this->stack=array(); 
  7.     $this->stack_top=-1; 
  8.   } 
  9.   public function push($data){ 
  10.     $this->stack[]=$data
  11.     $this->stack_top++; 
  12.   } 
  13.   public function pop(){ 
  14.     if(!$this->is_empty()) 
  15.     { 
  16.       $this->stack_top--; 
  17.       return array_pop($this->stack); 
  18.     }else 
  19.     { 
  20.       echo "stack is empty"
  21.     } 
  22.   } 
  23.   public function is_empty(){ 
  24.     if($this->stack_top==-1) 
  25.     return true; 
  26.   } 
  27. $string="1243-*+63/-"
  28. $arrs=str_split($string); 
  29. echo var_export($arrs); 
  30. $stack=new Stack(); 
  31. foreach($arrs as $arr){ 
  32.   switch($arr){ 
  33.     case "+":$one=$stack->pop();$two=$stack->pop();$temp=$two + $one;$stack->push($temp);break
  34.     case "-":$one=$stack->pop();$two=$stack->pop();$temp=$two - $one;$stack->push($temp);break
  35.     case "*":$one=$stack->pop();$two=$stack->pop();$temp=$two * $one;$stack->push($temp);break
  36.     case "/":$one=$stack->pop();$two=$stack->pop();$temp=$two / $one;$stack->push($temp);break
  37.     default:$stack->push($arr); 
  38.   } 
  39. echo $stack->pop(); 
  40. ?> 

运行结果:

  1. array ( 
  2.  0 => '1'
  3.  1 => '2'
  4.  2 => '4'
  5.  3 => '3'
  6.  4 => '-'
  7.  5 => '*'
  8.  6 => '+'
  9.  7 => '6'
  10.  8 => '3'
  11.  9 => '/'
  12.  10 => '-'
  13. )1

Tags: PHP基于栈后缀

分享到: