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截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP在线书签系统分享
Jan 04 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
js 判断 enter 事件
2009/02/12 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
总结js函数相关知识点
2018/02/27 Javascript
python分割列表(list)的方法示例
2017/05/07 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python制作简单五子棋游戏
2019/06/18 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
2014年党支部承诺书
2014/05/30 职场文书
大学生实习证明范本
2014/09/19 职场文书
个人委托书如何写
2014/09/25 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
处理canvas绘制图片模糊问题
2022/05/11 Javascript