广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php双向队列实例讲解
  • 189
分享到

php双向队列实例讲解

php双向队列 2018-09-20 10:09:34 189人浏览 无得
摘要

双向队列是指一种具有队列和栈的性质的数据结构。 双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。 双向队列就像是一个队列,但是你可以在任何一端添加或移除元素。 实例 <?PHP class Double

双向队列是指一种具有队列和栈的性质的数据结构

双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

双向队列就像是一个队列,但是你可以在任何一端添加或移除元素。

实例


<?PHP
class DoubleQueue
{
    public $queue = array();
    
    public function addLast($value)
    {
        return array_push($this->queue,$value);
    }
    
    public function removeLast()
    {
 
        return array_pop($this->queue);
 
    }
 
    
 
    public function addFirst($value)
 
    {
        return array_unshift($this->queue,$value);
 
    }
 
    
    public function removeFirst()
    {
        return array_shift($this->queue);
    }
    
    public function makeEmpty()
    {
        unset($this->queue);
    }
    
    public function getFirst()
    {
        return reset($this->queue);
    }
    
    public function getLast()
    {
        return end($this->queue);
    }
    
    public function getLength()
    {
        return count($this->queue);
    }
}

实例扩展:

(deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

在实际使用中,还可以有输出受限的双向队列(即一个端点允许插入和删除,另一个端点只允许插入的双向队列)和输入受限的双向队列(即一个端点允许插入和删除,另一个端点只允许删除的双向队列)。而如果限定双向队列从某个端点插入的元素只能从该端点删除,则该双向队列就蜕变为两个栈底相邻的栈了。

DEQue.class.php类文件如下:


<?php 
 
 
class DEQue{ // class start 
 
  private $_queue = array(); // 对列 
  private $_maxLength = 0;  // 对列最大长度,0表示不限 
  private $_type = 0;    // 对列类型 
  private $_frontNum = 0;  // 前端插入的数量 
  private $_rearNum = 0;   // 后端插入的数量 
 
 
   
  public function __construct($type=1, $maxlength=0){ 
    $this->_type = in_array($type, array(1,2,3,4,5,6))? $type : 1; 
    $this->_maxLength = intval($maxlength); 
  } 
 
 
   
  public function frontAdd($data=null){ 
 
    if($this->_type==3){ // 前端输入限制 
      return false; 
    } 
 
    if(isset($data) && !$this->isFull()){ 
 
      array_unshift($this->_queue, $data); 
 
      $this->setAddNum(1); 
 
      return true; 
    } 
    return false; 
  } 
 
   
  public function frontRemove(){ 
 
    if($this->_type==2){ // 前端输出限制 
      return null; 
    } 
 
    if(!$this->checkRemove(1)){ // 检查是否依赖输入 
      return null; 
    } 
 
    $data = null; 
 
    if($this->getLength()>0){ 
 
      $data = array_shift($this->_queue); 
 
      $this->setRemoveNum(1); 
    } 
    return $data; 
  } 
 
   
  public function rearAdd($data=null){ 
 
    if($this->_type==5){ // 后端输入限制 
      return false; 
    } 
 
    if(isset($data) && !$this->isFull()){ 
 
      array_push($this->_queue, $data); 
 
      $this->setAddNum(2); 
 
      return true; 
    } 
    return false; 
  } 
 
   
  public function rearRemove(){ 
 
    if($this->_type==4){ // 后端输出限制 
      return null; 
    } 
 
    if(!$this->checkRemove(2)){ // 检查是否依赖输入 
      return null; 
    } 
 
    $data = null; 
 
    if($this->getLength()>0){ 
 
      $data = array_pop($this->_queue); 
 
      $this->setRemoveNum(2); 
    } 
    return $data; 
  } 
 
   
  public function clear(){ 
    $this->_queue = array(); 
    $this->_frontNum = 0; 
    $this->_rearNum = 0; 
    return true; 
  } 
 
   
  public function isFull(){ 
    $bIsFull = false; 
    if($this->_maxLength!=0 && $this->_maxLength==$this->getLength()){ 
      $bIsFull = true; 
    } 
    return $bIsFull; 
  } 
 
   
  private function getLength(){ 
    return count($this->_queue); 
  } 
 
   
  private function setAddNum($endpoint){ 
    if($this->_type==6){ 
      if($endpoint==1){ 
        $this->_frontNum ++; 
      }else{ 
        $this->_rearNum ++; 
      } 
    } 
  } 
 
   
  private function setRemoveNum($endpoint){ 
    if($this->_type==6){ 
      if($endpoint==1){ 
        $this->_frontNum --; 
      }else{ 
        $this->_rearNum --; 
      } 
    } 
  } 
 
   
  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(); 
 
var_dump($result); 
 
?> 

以上就是php双向队列实例讲解的详细内容,更多关于php双向队列如何理解的资料请关注编程界其它相关文章!

--结束END--

本文标题: php双向队列实例讲解

本文链接: https://www.lsjlt.com/news/55.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php双向队列实例讲解
    双向队列是指一种具有队列和栈的性质的数据结构。 双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。 双向队列就像是一个队列,但是你可以在任何一端添加或移除元素。 实例 <?php class Double...
    99+
    2018-09-20
    php 双向队列
  • php双向队列的实例分析
    php双向队列的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。双向队列是指一种具有队列和栈的性质的数据结构。双向队列中的元素可以从两端弹出,其限定插入和...
    99+
    2023-06-25
  • 怎么理解php双向队列
    这篇文章主要讲解了“怎么理解php双向队列”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解php双向队列”吧!双向队列是指一种具有队列和栈的性质的数据结构。双向队列中的元素可以从两端弹...
    99+
    2023-06-25
  • php怎么实现双向队列
    在PHP中,可以使用数组来实现双向队列。下面是一个示例代码: class Deque { private $deque; ...
    99+
    2023-10-22
    php
  • 什么是php双向队列
    这篇文章主要讲解了“什么是php双向队列”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是php双向队列”吧!php双向队列是指一种具有队列和栈的性质的数据结构;双向队列中的元素可以从两端...
    99+
    2023-06-25
  • php双向队列什么意思
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php双向队列什么意思?PHP — 用PHP实现一个双向队列简介deque,全名double-ended queue,是一种具有队列和栈的性质的数据结构。双端队列中的元素...
    99+
    2015-12-16
    php 双向队列
  • laravel使用redis队列实例讲解
    1、队列配置文件是config/queue.php(这里我默认配置即可): 2、 创建迁移表(failed-table 、jobs、migrations) php artis...
    99+
    2022-11-11
    laravel使用redis队列 php操作redis队列
  • js的双向绑定实例讲解
    这篇文章主要介绍“js的双向绑定实例讲解”,在日常操作中,相信很多人在js的双向绑定实例讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js的双向绑定实例讲解”的疑惑有所帮...
    99+
    2022-10-19
    js
  • 运用.NetCore实例讲解RabbitMQ死信队列,延时队列
    目录一、死信队列二、延时队列三、延时消息设置不同过期时间四、延时消息用延时插件的方式实现一、死信队列 描述:Q1队列绑定了x-dead-letter-exchange(死信交换机)...
    99+
    2022-11-12
    .NetCore RabbitMQ 死信队列 .NetCore RabbitMQ 延时队列
  • PHP使用Redis队列执行定时任务实例讲解
    Redis类: <?php namespace Utils; use Phalcon\Config\Adapter\Ini as ConfigIni; ...
    99+
    2022-11-11
    PHP使用Redis队列 PHP执行定时任务
  • Java堆&优先级队列示例讲解(上)
    目录1. 二叉树的顺序存储1.1 存储方式1.2 下标关系2. 堆(heap)2.1 概念2.2 操作-(下沉&上浮)本例是最大堆2.3 建堆-完整代码(最大堆)3. 优先级...
    99+
    2022-11-13
    Java 堆 优先级队列 Java 堆 Java 优先级队列
  • Java堆&优先级队列示例讲解(下)
    目录1.优先级队列1.1 概念1.2 内部原理1.3 操作-入队列1.4 操作-出队列(优先级最高)1.5 借用堆实现优先级队列1.6 测试1.优先级队列 1.1 概念 在很多应用中...
    99+
    2022-11-13
    Java 堆 优先级队列 Java 堆 Java 优先级队列
  • C语言超详细讲解栈与队列实现实例
    目录1.思考-12.栈基本操作的实现2.1 初始化栈2.2 入栈2.3 出栈2.4 获取栈顶数据2.5 获取栈中有效元素个数2.6 判断栈是否为空2.7 销毁栈3.测试3.1 测试3...
    99+
    2022-11-13
    C语言 栈与队列 C语言 栈 C语言 队列
  • C语言示例代码讲解栈与队列
    目录栈栈的定义顺序栈顺序栈的定义顺序栈的初始化顺序栈的入栈顺序栈的出栈取顺序栈的栈顶元素链栈队列队列的定义队列的顺序表达与实现队列顺序存储结构假溢出循环队列循环队列的初始化循环队列的...
    99+
    2022-11-13
    C语言 栈与队列 C语言 实现栈与队列
  • Yii使用queue实现队列流程讲解
    目录一、安装queue二、配置queue三、使用queue一、安装queue composer require yiisoft/yii2-queue 二、配置queue 安装queu...
    99+
    2022-11-13
    Yii queue Yii queue队列
  • python双向链表实例详解
    使用python实现双向链表,供大家参考,具体内容如下 双向链表: 指的是讲数据链接在一起,每个数据是一个节点,每一个节点都有一个数据区,两个链接区,分别链接上一个节点和下一个节点数...
    99+
    2022-11-11
    python 双向链表
  • python 队列详解及实例代码
    队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。 Queue模块最常与threading模块一起构成生产-消费者模型,提供了一个适用于多线程编程的先进...
    99+
    2022-06-04
    队列 详解 实例
  • PHP ignore_user_abort()实例讲解
    ignore_user_abort()函数用于设置脚本在客户端断开连接后是否继续执行。当客户端断开连接时,通常情况下脚本会立即终止执...
    99+
    2023-09-28
    PHP
  • C语言简明讲解队列的实现方法
    目录前言队列的表示和实现队列的概念及结构代码实现束语前言 大家好啊,我又双叒叕来水博客了,道路是曲折的,前途是光明的,事物是呈螺旋式上升的,事物最终的发展结果还是我们多多少少能够决定...
    99+
    2022-11-13
    C语言队列 C语言队列函数
  • Vue数据双向绑定的实现方式讲解
    目录前言一、input和textarea二、radio和CheckBox三、select四、双向绑定的修饰符前言 在web开发应用中,很多项目都会用到表格一列的组件进行数据的传输、获...
    99+
    2022-11-13
    Vue数据双向绑定原理 Vue数据双向绑定实现
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作