A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 金牌黑马   /  2018-11-2 08:51  /  1211 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本文实例讲述了PHP队列原理及基于队列的写文件案例。分享给大家供大家参考,具体如下:

队列是一种线性表,按照先进先出的原则进行的:

入队:


出队:

PHP实现队列:第一个元素作为队头,最后一个元素作为队尾



  • <?php



  • /**



  • * 队列就是这么简单



  • *



  • * @link



  • */



  • $array = array('PHP', 'JAVA');



  • array_push($array, 'PYTHON'); //入队列



  • array_shift($array); //出队列


栈和队列

栈只允许访问一个数据项:即最后插入的数据项,移除这个数据项后才能访问倒数第二个插入的数据项,依此类推。
队列有点类似栈,只是在队列中第一个插入的数据项会最先被移除(先进先出,FIFO),而在栈中,最后插入的数据项最先移除(LIFO)。队列和栈一样也被用作程序员的工具。它也可以用于模拟真实世界的环境,例如模拟人们在银行里排队等待

什么是双端队列(或双向队列)Deque,全名double-ended queue?

即元素可以在队列的任意一段入队或出队,如果我们把这些方法叫做insertLeft()和insertRight(),以及removeLeft()和removeRight()。如果严格禁止调用insertLeft()和removeLeft()方法(或禁用右段的操作),双端队列功能就和栈一样。禁止调用insertLeft()和removeRight()(或相反的另一对方法),它的功能就和队列一样了。双端队列与栈或队列相比,是一种多用途的数据结构。

双端队列顾名思义,他有两个端,什么端呢,一般的队列也是有两个端,一个输入,一个输出。双端队列也有两个端,但是这两个端是输入输出均可的:

  这个队列有的好处很多,首先他每个段都可以出也可以出,如果只是用一个端出另一个端入,那么他的作用就和队列是一样的,如果是只用一个端输入输出,那么他又和栈的作用是一样的。

PHP实现双端队列



  • <?php



  • class Deque



  • {



  •   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);



  •   }



  • }


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

队列的用途:

队列可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。

【转载】

https://blog.csdn.net/LYinG7/article/details/82497587

2 个回复

倒序浏览
ヾ(◍°∇°◍)ノ゙
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马