加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 教程 > 正文

php实现的双向队列类实例

发布时间:2022-06-22 09:00:52 所属栏目:教程 来源:互联网
导读:这篇文章主要介绍了php实现的双向队列类,是数据结构中非常重要的一个数据结构类型,需要的朋友可以参考下 本文实例讲述了php实现的双向队列类及其用法,对于PHP数据结构与算法的学习有不错的参考价值。分享给大家供大家参考。具体分析如下: (deque,全名dou

    /** 清空对列  
    * @return boolean  
    */
    public function clear(){  
      $this->_queue = array();  
      $this->_frontNum = 0;  
      $this->_rearNum = 0;  
      return true;  
    }  
     
    /** 判断对列是否已满  
    * @return boolean  
    */
    public function isFull(){  
      $bIsFull = false;  
      if($this->_maxLength!=0 && $this->_maxLength==$this->getLength()){  
        $bIsFull = true;  
      }  
      return $bIsFull;  
    }  
     
    /** 获取当前对列长度  
    * @return int  
    */
    private function getLength(){  
      return count($this->_queue);  
    }  
     
    /** 记录入列,输出依赖输入时调用  
    * @param int $endpoint 端点 1:front 2:rear  
    */
    private function setAddNum($endpoint){  
      if($this->_type==6){  
        if($endpoint==1){  
          $this->_frontNum ++;  
        }else{  
          $this->_rearNum ++;  
        }  
      }  
    }  
     
    /** 记录出列,输出依赖输入时调用  
    * @param int $endpoint 端点 1:front 2:rear  
    */
    private function setRemoveNum($endpoint){  
      if($this->_type==6){  
        if($endpoint==1){  
          $this->_frontNum --;  
        }else{  
          $this->_rearNum --;  
        }  
      }  
    }  
     
    /** 检查是否输出依赖输入  
    * @param int $endpoint 端点 1:front 2:rear  
    */
    private function checkRemove($endpoint){  
      if($this->_type==6){  
        if($endpoint==1){  
          return $this->_frontNum>0;  
        }else{  
          return $this->_rearNum>0;  
        }  
      }  
      return true;  
    }  
  } // class end  
  ?>  
  demo.php示例代码如下:
 
  <?php  
     
  require "DEQue.class.php";  
     
  // 例子1  
     
  $obj = new DEQue(); // 前后端都可以输入,无限长度  
     
  $obj->frontAdd('a'); // 前端入列  
  $obj->rearAdd('b'); // 后端入列  
  $obj->frontAdd('c'); // 前端入列  
  $obj->rearAdd('d'); // 后端入列  
     
  // 入列后数组应为 cabd  
     
  $result = array();  
     
  $result[] = $obj->rearRemove(); // 后端出列  
  $result[] = $obj->rearRemove(); // 后端出列  
  $result[] = $obj->frontRemove(); // 前端出列  
  $result[] = $obj->frontRemove(); // 前端出列  
     
  print_r($result); // 出列顺序应为 dbca  
     
  // 例子2  
  $obj = new DEQue(3, 5); // 前端只能输出,后端可输入输出,最大长度5  
     
  $insert = array();  
  $insert[] = $obj->rearAdd('a');  
  $insert[] = $obj->rearAdd('b');  
  $insert[] = $obj->frontAdd('c'); // 因前端只能输出,因此这里会返回false  
  $insert[] = $obj->rearAdd('d');  
  $insert[] = $obj->rearAdd('e');  
  $insert[] = $obj->rearAdd('f');  
  $insert[] = $obj->rearAdd('g'); // 超过长度,返回false  
     
  var_dump($insert);  
     
  // 例子3  
  $obj = new DEQue(6); // 输出依赖输入  
     
  $obj->frontAdd('a');  
  $obj->frontAdd('b');  
  $obj->frontAdd('c');  
  $obj->rearAdd('d');  
     
  $result = array();  
  $result[] = $obj->rearRemove();  
  $result[] = $obj->rearRemove(); // 因为输出依赖输入,这个会返回NULL  
  $result[] = $obj->frontRemove();  
  $result[] = $obj->frontRemove();  
  $result[] = $obj->frontRemove();  
  //www.phpfensi.com
  var_dump($result);  
     
  ?>
 

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读