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 ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
Web程序工作原理详解
Dec 25 PHP
php定时执行任务设置详解
Feb 06 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 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字符串处理的10个简单方法
2010/06/30 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP类的反射用法实例
2014/11/03 PHP
Javascript Memoizer浅析
2014/10/16 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
js实现时钟定时器
2020/03/26 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python生成数字图片代码分享
2017/10/31 Python
Flask之请求钩子的实现
2018/12/23 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python 串口通信的实现
2020/09/29 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
北京某公司的.net笔试题
2014/03/20 面试题
大学生创业计划书的用途
2014/01/08 职场文书
《草原》教学反思
2014/02/15 职场文书
校园标语大全
2014/06/19 职场文书
沈阳故宫导游词
2015/01/31 职场文书
学术会议通知范文
2015/04/15 职场文书