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 header()函数使用说明
Jul 10 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 PHP
php header功能的使用
Oct 28 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
javascript 数组的方法集合
2008/06/05 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
2017/07/06 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
Python3转换html到pdf的不同解决方案
2019/03/11 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python文件选择对话框的操作方法
2019/06/27 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
Pytorch的mean和std调查实例
2020/01/02 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
岗位职责风险点
2014/03/12 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle