当前位置:首页 > 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. } 
  28. $string="1243-*+63/-"; 
  29. $arrs=str_split($string); 
  30. echo var_export($arrs); 
  31. $stack=new Stack(); 
  32. foreach($arrs as $arr){ 
  33.   switch($arr){ 
  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.     case "/":$one=$stack->pop();$two=$stack->pop();$temp=$two / $one;$stack->push($temp);break; 
  38.     default:$stack->push($arr); 
  39.   } 
  40. } 
  41. echo $stack->pop(); 
  42. ?> 

运行结果:

  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基于栈后缀

分享到: