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访问查询mysql数据的三种方法
Oct 09 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
php实现图片压缩处理
Sep 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
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
php读取excel文件的简单实例
2013/08/26 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
golang与PHP输出excel示例
2016/07/22 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
python中正则表达式的使用方法
2018/02/25 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
《落花生》教学反思
2014/02/25 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
经销商订货会主持词
2014/03/27 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
新闻通讯稿模板
2015/07/22 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript