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

双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作:

push(D,X) 将项X 插入到双端队列D的前端

pop(D) 从双端队列D中删除前端项并将其返回

inject(D,X) 将项X插入到双端队列D的尾端

eject(D) 从双端队列D中删除尾端项并将其返回

PHP实现代码

 代码如下 复制代码
<?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);

}

}

例子

编写支持双端队伍的例程,每种操作均花费O(1)时间

 代码如下 复制代码

class deque

{

public $queue  = array();

public $length = 0;

public function frontAdd($node){

array_unshift($this->queue,$node);

$this->countqueue();

}

public function frontRemove(){

$node = array_shift($this->queue);

$this->countqueue();

return $node;

}

public function rearAdd($node){

array_push($this->queue,$node);

$this->countqueue();

}

public function rearRemove(){

$node = array_pop($this->queue);

$this->countqueue();

return $node;

}

public function countqueue(){

$this->length = count($this->queue);

}

}

$fruit = new deque();

echo $fruit -> length;

$fruit -> frontAdd("Apple");

$fruit -> rearAdd("Watermelon");

echo '

';

print_r($fruit);

echo '

';

?>

结果

0

deque Object

(

[queue] => Array

(

[0] => Apple

[1] => Watermelon

)

[length] => 2

)

php实现双向队列详解,PHP实现一个双向队列例子相关推荐

  1. 详解Linux内核之双向循环链表 By邪恶八进制

    [转载]详解Linux内核之双向循环链表 详解Linux内核之双向循环链表 信息来源:邪恶八进制信息安全团队(www.eviloctal.com) 摘要:      本文详解了内核中面向对象的list ...

  2. 转:Java 7 种阻塞队列详解

    转自: Java 7 种阻塞队列详解 - 云+社区 - 腾讯云队列(Queue)是一种经常使用的集合.Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表. ...

  3. 详解Nginx SSL快速双向认证配置(脚本)

    这篇文章主要介绍了详解Nginx SSL快速双向认证配置(脚本),现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 目前遇到一个项目有安全性要求,要求只有个别用户有权限访问.本着能用配置解决就 ...

  4. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  5. (08)System Verilog 队列详解

    (08)System Verilog 队列详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 队列详解 5)结语 1.2 FPGA简 ...

  6. Unicode双向算法详解(bidi算法)(二)

    作者:黄邦勇帅(原名:黄勇)2019-10-17 Unicode双向算法详解(bidi算法)(二) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C+ ...

  7. Unicode双向算法详解(bidi算法)(一)

    Unicode双向算法详解(bidi算法)(一) 注:本文已独家授权给脚本之家(ID:jb51net)公众号发布 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是 ...

  8. Unicode双向算法详解(bidi算法)(三)

    Unicode双向算法详解(bidi算法)(三) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C++语法详解>一书相关章节的增补,以增强读者对 ...

  9. linux fq队列,QOS各种队列详解(FIFO,FQ,CBWFQ,PQ).doc

    QOS各种队列详解(FIFO,FQ,CBWFQ,PQ) QOS各种队列详解(FIFO,FQ,CBWFQ,PQ) 对于拥塞管理,一般采用队列技术,使用一个队列算法对流量进行分类,之后用某种优先级别算法将 ...

最新文章

  1. 【mysql解决方案】ERROR 1248 (42000): Every derived table must have its own alias
  2. 健康很重要 程序员应该坚持正确的坐姿工作
  3. 汉字输入练习 TypeChinese.java
  4. python多线程写同一个文件_Python多线程快速写入文件,python,飞速
  5. 网页制作的基本语言html,网页制作基础语言HTML.ppt
  6. Go Web 编程--超详细的模板库应用指南
  7. Android中使用shape来定义控件的显示属性
  8. html2canvas截图地图和看到的不一样_大秦赋,我看到的不一样的赢异人。
  9. Spring配置补充
  10. roseMirrorHA5.0 for WindowsServer2008R2配合sqlserver2012|Oracle 11g的安装和配置
  11. C++ Primer 第5版--练习8.4
  12. 微信表情包 php,教你用PS给你的室友做一套动态微信豪华表情包
  13. 小程序开发-Step1
  14. 斗魔之残龙纹 第一章
  15. eToken 身份认证
  16. 用计算机公式表白,昨天,我用IF函数表白成功了!
  17. cocos creator周边工具开发【spine预览】小记
  18. 富芮坤fr8008gp lvgl遇坑和解法:卡死在lvgl定时器中;SWD接口配置;
  19. C++贪心算法之最小新整数
  20. [ 深度学习 ] 胶囊网络(Capsule)

热门文章

  1. 分类算法支持向量机(SVM) 简介与入门
  2. 2017年网易校招题 数字翻转
  3. python魔法函数和装饰器_python魔法方法、构造函数、序列与映射、迭代器、生成器...
  4. js设计一个带开关的时钟_数电题:三个按键一个灯
  5. java实现对大文件切割下载_Java实现大文件的切割与合并操作示例
  6. python+OpenCV图像处理(三)绘制简单的几何图形、显示文字
  7. linux模式匹配运算符,linux之正则表达式
  8. mysql3.51 密码修改_mysql修改密码
  9. python合并路径和文件名_Python实例 分割路径和文件名
  10. linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆