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 30 PHP
PHP 采集获取指定网址的内容
Jan 05 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
php创建无限级树型菜单
Nov 05 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 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
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php中的观察者模式简单实例
2015/01/20 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
网络程序员自荐信
2014/01/25 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
2014中考励志标语
2014/06/05 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
四十九个javascript小知识实用技巧
2021/11/20 Javascript
使用Ajax实现无刷新上传文件
2022/04/12 Javascript