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 相关文章推荐
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
php获取mysql字段名称和其它信息的例子
Apr 14 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
优化javascript的执行速度
2010/01/23 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
python3实现基于用户的协同过滤
2018/05/31 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
求职简历推荐信范文
2013/12/02 职场文书
个人思想政治总结
2015/03/05 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
公司员工辞职信范文
2015/05/12 职场文书
新课程改革心得体会
2016/01/22 职场文书
python实现高效的遗传算法
2021/04/07 Python
MySQL索引是啥?不懂就问
2021/07/21 MySQL
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技