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 20 PHP
php随机输出名人名言的代码
Oct 07 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 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中array_rand函数的使用方法
2016/09/11 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
在vue中使用Base64转码的案例
2020/08/07 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python中return self的用法详解
2018/07/27 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
浅析python实现动态规划背包问题
2020/12/31 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
《假如》教学反思
2014/04/17 职场文书
主题班会演讲稿
2014/05/22 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
雷锋之歌观后感
2015/06/10 职场文书
python实现简单反弹球游戏
2021/04/12 Python
浅析MySQL如何实现事务隔离
2021/06/26 MySQL