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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
图书管理程序(二)
Oct 09 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
Laravel下生成验证码的类
Nov 15 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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
web方式ftp
2006/10/09 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
Js+XML 操作
2006/09/20 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
浅析PHP与Python进行数据交互
2018/05/15 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
10个Python小技巧你值得拥有
2018/09/29 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
Numpy之random函数使用学习
2019/01/29 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
什么是组件架构
2016/05/15 面试题
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
反邪教标语
2014/06/23 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
超市店庆活动方案
2014/08/31 职场文书
作风大整顿心得体会
2014/09/10 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
2015年三万活动总结
2015/03/25 职场文书