PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例


Posted in PHP onMay 12, 2015

队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO)。

PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现。
SplQueue类摘要如下:

PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

SplQueue简单使用如下:

$queue = new SplQueue();

 

/**

 * 可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:

 * (1)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP  (默认值,迭代后数据保存)

 * (2)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE (迭代后数据删除)

 */

$queue->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE);

 

//SplQueue::enqueue()其实就是 SplDoublyLinkedList::push()

$queue->enqueue('a');

$queue->enqueue('b');

$queue->enqueue('c');

 

//SplQueue::dequeue()其实就是 SplDoublyLinkedList::shift()

print_r($queue->dequeue());

 

foreach($queue as $item) {

    echo $item . PHP_EOL;

}

 

print_r($queue);

而优先队列SplPriorityQueue是基于堆(后文介绍)实现的。
SplPriorityQueue的类摘要如下:

PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

SplPriorityQueue简单使用:

$pq = new SplPriorityQueue();
 
$pq->insert('a', 10);
$pq->insert('b', 1);
$pq->insert('c', 8);
 
echo $pq->count() .PHP_EOL; //3
echo $pq->current() . PHP_EOL; //a
 
/**
 * 设置元素出队模式
 * SplPriorityQueue::EXTR_DATA 仅提取值
 * SplPriorityQueue::EXTR_PRIORITY 仅提取优先级
 * SplPriorityQueue::EXTR_BOTH 提取数组包含值和优先级
 */
$pq->setExtractFlags(SplPriorityQueue::EXTR_DATA);
 
while($pq->valid()) {
  print_r($pq->current()); //a c b
  $pq->next();
}
PHP 相关文章推荐
php面向对象的方法重载两种版本比较
Sep 08 PHP
php session 检测和注销
Mar 16 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php+mysql查询优化简单实例
Jan 13 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
CodeIgniter常用知识点小结
May 26 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
用php实现分页效果的示例代码
Dec 10 PHP
php对象和数组相互转换的方法
May 12 #PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 #PHP
php对数组内元素进行随机调换的方法
May 12 #PHP
PHP SplObjectStorage使用实例
May 12 #PHP
PHP中预定义的6种接口介绍
May 12 #PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 #PHP
PHP 反射(Reflection)使用实例
May 12 #PHP
You might like
php4的彩蛋
2006/10/09 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php自定义session示例分享
2014/04/22 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
对Python3 序列解包详解
2019/02/16 Python
Python argparse模块应用实例解析
2019/11/15 Python
python实现数字炸弹游戏
2020/07/17 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
安全资料员岗位职责
2013/12/14 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
节约用电标语
2014/06/17 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书