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 读取文件乱码问题
Feb 20 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
如何判断php数组的维度
Jun 10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
php 常用的系统函数
Feb 07 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
java必学必会之static关键字
2015/12/03 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
vue interceptor 使用教程实例详解
2018/09/13 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Python 中Operator模块的使用
2021/01/30 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
转党组织关系介绍信
2014/01/08 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
建设工程授权委托书
2014/09/22 职场文书