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

这篇文章主要介绍了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