博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php标准库中的优先队列SplPriorityQueue怎么使用?(继承)
阅读量:6037 次
发布时间:2019-06-20

本文共 3241 字,大约阅读时间需要 10 分钟。

php标准库中的优先队列SplPriorityQueue怎么使用?(继承)

一、总结

1、new对象,然后通过insert方法和extract方法来使用,top方法也很常用。

2、类的话首先想到继承,所以可以继承SplPriorityQueue来实现自己特定功能的优先队列。(继承思想)

 

二、php标准库中的优先队列SplPriorityQueue怎么使用?

而优先队列SplPriorityQueue是基于(后文介绍)实现的。

SplPriorityQueue简单使用:

1 $pq = new SplPriorityQueue(); 2    3 $pq->insert('a', 10); 4 $pq->insert('b', 1); 5 $pq->insert('c', 8); 6    7 echo $pq->count() .PHP_EOL; //3 8 echo $pq->current() . PHP_EOL; //a 9   10 /**11  * 设置元素出队模式12  * SplPriorityQueue::EXTR_DATA 仅提取值13  * SplPriorityQueue::EXTR_PRIORITY 仅提取优先级14  * SplPriorityQueue::EXTR_BOTH 提取数组包含值和优先级15  */16 $pq->setExtractFlags(SplPriorityQueue::EXTR_DATA);17   18 while($pq->valid()) {19   print_r($pq->current()); //a c b20   $pq->next();21 }22

 

三、php手册:SplPriorityQueue

简介

The SplPriorityQueue class provides the main functionalities of a prioritized queue, implemented using a max heap.

类摘要

SplPriorityQueue implements Iterator  {
/* 方法 */
public  ( void )
public int  (  $priority1 ,  $priority2 )
public int  ( void )
public mixed  ( void )
public mixed  ( void )
public int  ( void )
public void  (  $value ,  $priority )
public bool  ( void )
public bool  ( void )
public mixed  ( void )
public void  ( void )
public void  ( void )
public void  ( void )
public void  ( int $flags )
public mixed  ( void )
public bool  ( void )
}

Table of Contents

  •  — Compare priorities in order to place elements correctly in the heap while sifting up
  •  — Constructs a new empty queue
  •  — Counts the number of elements in the queue
  •  — Return current node pointed by the iterator
  •  — Extracts a node from top of the heap and shift up
  •  — Get the flags of extraction
  •  — Inserts an element in the queue by sifting it up
  •  — Tells if the priority queue is in a corrupted state
  •  — Checks whether the queue is empty
  •  — Return current node index
  •  — Move to the next node
  •  — Recover from the corrupted state and allow further actions on the queue
  •  — Rewind iterator back to the start (no-op)
  •  — Sets the mode of extraction
  •  — Peeks at the node from the top of the queue
  •  — Check whether the queue contains more nodes

 

1 quick implementation of SPL Priority Queue:  2  3 
insert('A',3); 17 $objPQ->insert('B',6); 18 $objPQ->insert('C',1); 19 $objPQ->insert('D',2); 20 21 echo "COUNT->".$objPQ->count()."
"; 22 23 //mode of extraction 24 $objPQ->setExtractFlags(PQtest::EXTR_BOTH); 25 26 //Go to TOP 27 $objPQ->top(); 28 29 while($objPQ->valid()){ 30 print_r($objPQ->current()); 31 echo "
"; 32 $objPQ->next(); 33 } 34 35 ?> 36 37 output: 38 39 COUNT->4 40 Array ( [data] => B [priority] => 6 ) 41 Array ( [data] => A [priority] => 3 ) 42 Array ( [data] => D [priority] => 2 ) 43 Array ( [data] => C [priority] => 1 )

 

四、测试题-简答题

1、SplPriorityQueue的入队方法和出队方法是什么?

解答:insert和extract。top方法也很常用。

 

2、如何遍历一个SplPriorityQueue?

解答:valid()+current()+next()。

29 while($objPQ->valid()){ 30     print_r($objPQ->current()); 31 echo "
"; 32 $objPQ->next(); 33 }

 

3、SplPriorityQueue的实现原理是什么,用的那种数组结构?

解答:用的大根堆。using a max heap。

 

4、如何插入一个元素到SplPriorityQueue中去?

解答:$objPQ->insert('A',3);  先值后优先级,是一个map。

 

5、如何写符合自己功能的优先队列(通过继承)?(有类先想继承)

解答:继承SplPriorityQueue类即可,class PQtest extends SplPriorityQueue 。

 

6、如何设置SplPriorityQueue的提取数据方式,是值是优先级还是两者都提取?

解答:通过SPLPriorityQueue的setExtractFlags方法,$pq->setExtractFlags(SplPriorityQueue::EXTR_DATA);

 

转载地址:http://zqohx.baihongyu.com/

你可能感兴趣的文章
Freedur为什么免费?
查看>>
mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
查看>>
Bootstrap系列 -- 11. 基础表单
查看>>
格拉西安《智慧书》中最有价值的23条法则
查看>>
Swift使用单个案件管理FMDB数据库
查看>>
Actionscript Flash Event.ENTER_FRAME 延迟间隔非常大 并且 pre-render 耗时非常严重
查看>>
php JSON数据格式化输出方法
查看>>
7款经典炫酷的HTML5/jQuery动画应用示例及源码
查看>>
那些年我们一起追过的缓存写法(四)
查看>>
mssql手工注入
查看>>
appserv+win8
查看>>
Android 应用接入广点通统计API 方案
查看>>
安装 LuaSocket
查看>>
NEXUS7 学习
查看>>
zoj 3203 Light Bulb,三分之二的基本问题
查看>>
【转】idea 用maven骨架生成项目速度慢的问题
查看>>
OpenGL【2 坐标转换】
查看>>
linux内核内存管理(zone_dma zone_normal zone_highmem)
查看>>
移动端事件对象touches的误区
查看>>
ASP.NET State Server 服务 sessionState
查看>>