PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例

 更新时间:2015年05月12日 09:21:44   投稿:junjie  
这篇文章主要介绍了PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例,需要的朋友可以参考下

队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO)。

PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现。
SplQueue类摘要如下:

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的类摘要如下:

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();
}

相关文章

  • 使用Yii2实现主从数据库设置

    使用Yii2实现主从数据库设置

    大家应该都知道,当项目做大了,数据库主从还是不可少的。使用Yii框架开发,如何设置数据库的主从呢?其实很简单。下面这篇文章就给大家详细介绍了使用Yii2实现主从数据库设置的方法,文中介绍的很详细,相信对大家的理解和学习很有帮助,下面来一起学习学习吧。
    2016-11-11
  • Codeigniter上传图片出现“You did not select a file to upload”错误解决办法

    Codeigniter上传图片出现“You did not select a file to upload”错误解决办法

    这篇文章主要介绍了Codeigniter上传图片出现“You did not select a file to upload”的解决办法,需要的朋友可以参考下
    2014-06-06
  • 利用PHP如何写APP接口详解

    利用PHP如何写APP接口详解

    很多朋友在开发时遇到过这样的问题:后台什么时候提供接口?怎么才提供一个接口,其他接口什么时候给出来?没有接口我们前端怎么能做得了?那学完本篇就可以自己搞个接口来返回固定的死数据来测试了!
    2016-08-08
  • php单例模式的简单实现方法

    php单例模式的简单实现方法

    下面小编就为大家带来一篇php单例模式的简单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • thinkphp的URL路由规则与配置实例

    thinkphp的URL路由规则与配置实例

    这篇文章主要介绍了thinkphp的URL路由规则与配置方法,实例分析了ThinkPHP的路由规则及伪静态设置方法,并分析了相关的注意事项,是ThinkPHP开发中非常重要的技巧,需要的朋友可以参考下
    2014-11-11
  • laravel5 使用try catch的实例详解

    laravel5 使用try catch的实例详解

    这篇文章主要介绍了laravel5 使用try catch的相关知识,需要的朋友可以参考下
    2017-11-11
  • Smarty模板简单配置与使用方法示例

    Smarty模板简单配置与使用方法示例

    这篇文章主要介绍了Smarty模板简单配置与使用方法,涉及Smarty模板的基本配置与缓存文件的相关使用技巧,需要的朋友可以参考下
    2016-05-05
  • ThinkPHP框架设计及扩展详解

    ThinkPHP框架设计及扩展详解

    本文详细介绍了ThinkPHP框架的框架分层及url路由、ThinkPHP扩展、数据库驱动扩展、Behavior行为扩展以及源码分析与不足,讲解的十分全面系统,这里推荐给大家,有想学习ThinkPHP的小伙伴千万不要错过。
    2014-11-11
  • thinkphp3.2实现在线留言提交验证码功能

    thinkphp3.2实现在线留言提交验证码功能

    这篇文章主要为大家详细介绍了TP3.2写提交的验证码验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • YII2框架中excel表格导出的方法详解

    YII2框架中excel表格导出的方法详解

    最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面这篇文章,这篇文章主要给大家介绍了关于YII2框架中excel表格导出的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07

最新评论