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调用数据库的存贮过程!
Oct 09 PHP
MYSQL数据库初学者使用指南
Nov 16 PHP
PHP垃圾回收机制简单说明
Jul 22 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
php标签云的实现代码
Oct 10 PHP
php缓存技术详细总结
Aug 07 PHP
php操作mysqli(示例代码)
Oct 28 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 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
Drupal简体中文语言包安装教程
2014/09/27 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Python telnet登陆功能实现代码
2020/04/16 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
中间件分为哪几类
2016/09/18 面试题
幼儿园教学随笔感言
2014/02/23 职场文书
测量工程专业求职信
2014/02/24 职场文书
师范类求职信
2014/06/21 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
新年晚会开场白
2015/05/29 职场文书
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技