php标准库中QplQueue队列如何使用?
一、总结
1、new对象,然后通过enqueue方法和dequeue方法使用。
二、php标准库中QplQueue队列如何使用?
队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO)。
PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现。
1 $queue = new SplQueue(); 2 3 /** 4 * 可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为: 5 * (1)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP (默认值,迭代后数据保存) 6 * (2)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE (迭代后数据删除) 7 */ 8 $queue->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE); 9 10 //SplQueue::enqueue()其实就是 SplDoublyLinkedList::push() 11 $queue->enqueue('a'); 12 $queue->enqueue('b'); 13 $queue->enqueue('c'); 14 15 //SplQueue::dequeue()其实就是 SplDoublyLinkedList::shift() 16 print_r($queue->dequeue()); 17 18 foreach($queue as $item) { 19 echo $item . PHP_EOL; 20 } 21 22 print_r($queue);
三、php参考手册
简介 ¶
SplQueue 类通过使用一个双向链表来提供队列的主要功能。
类摘要 ¶
1 SplQueue extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable { 2 /* 方法 */ 3 __construct ( void ) 4 mixed dequeue ( void ) 5 void enqueue ( mixed $value ) 6 void setIteratorMode ( int $mode ) 7 /* 继承的方法 */ 8 public void SplDoublyLinkedList::add ( mixed $index , mixed $newval ) 9 public mixed SplDoublyLinkedList::bottom ( void ) 10 public int SplDoublyLinkedList::count ( void ) 11 public mixed SplDoublyLinkedList::current ( void ) 12 public int SplDoublyLinkedList::getIteratorMode ( void ) 13 public bool SplDoublyLinkedList::isEmpty ( void ) 14 public mixed SplDoublyLinkedList::key ( void ) 15 public void SplDoublyLinkedList::next ( void ) 16 public bool SplDoublyLinkedList::offsetExists ( mixed $index ) 17 public mixed SplDoublyLinkedList::offsetGet ( mixed $index ) 18 public void SplDoublyLinkedList::offsetSet ( mixed $index , mixed $newval ) 19 public void SplDoublyLinkedList::offsetUnset ( mixed $index ) 20 public mixed SplDoublyLinkedList::pop ( void ) 21 public void SplDoublyLinkedList::prev ( void ) 22 public void SplDoublyLinkedList::push ( mixed $value ) 23 public void SplDoublyLinkedList::rewind ( void ) 24 public string SplDoublyLinkedList::serialize ( void ) 25 public void SplDoublyLinkedList::setIteratorMode ( int $mode ) 26 public mixed SplDoublyLinkedList::shift ( void ) 27 public mixed SplDoublyLinkedList::top ( void ) 28 public void SplDoublyLinkedList::unserialize ( string $serialized ) 29 public void SplDoublyLinkedList::unshift ( mixed $value ) 30 public bool SplDoublyLinkedList::valid ( void ) 31 }
Table of Contents ¶
- SplQueue::__construct — Constructs a new queue implemented using a doubly linked list
- SplQueue::dequeue — Dequeues a node from the queue
- SplQueue::enqueue — Adds an element to the queue
- SplQueue::setIteratorMode — Sets the mode of iteration
实例
1 <?php 2 3 $queue = new SplQueue(); 4 $queue->enqueue('A'); 5 $queue->enqueue('B'); 6 $queue->enqueue('C'); 7 8 $queue->rewind(); 9 while($queue->valid()){ 10 echo $queue->current()," "; 11 $queue->next(); 12 } 13 14 print_r($queue); 15 $queue->dequeue(); //remove first one 16 print_r($queue); 17 18 ?> 19 Output 20 21 A 22 B 23 C 24 SplQueue Object 25 ( 26 [flags:SplDoublyLinkedList:private] => 4 27 [dllist:SplDoublyLinkedList:private] => Array 28 ( 29 [0] => A 30 [1] => B 31 [2] => C 32 ) 33 34 ) 35 SplQueue Object 36 ( 37 [flags:SplDoublyLinkedList:private] => 4 38 [dllist:SplDoublyLinkedList:private] => Array 39 ( 40 [0] => B 41 [1] => C 42 ) 43 44 )
四、测试题-简答题
1、SplQueue是通过什么来实现的?
解答:双向链表,所以双向链表有的方法它全有。继承双链表(SplDoublyLinkedList)。
2、SplQueue如何使用?
解答:new一个SplQueue对象出来,然后用入队出队方法就可以轻松使用。
3、SplQueue的入队出队方法是什么?
解答:enqueue和dequeue。
4、SplQueue对象如何操作enqueue和dequeue方法?
解答:因为是php类对象,所以操作方法用->符号。
5、SqlQueue队列的遍历如何实现?
解答:foreach循环即可。foreach($queue as $item)
6、rewind的作用是什么?
解答:rewind — 倒回文件指针的位置。将 handle
的文件位置指针设为文件流的开头。bool rewind ( resource $handle
)。
7、什么时候使用rewind?
解答:比如要从头开始遍历或者输出队列的时候。
8、SqlQueue如何使用继承方法rewind()+valid()+current()+next()实现队列遍历?
解答:
$queue->rewind();
while($queue->valid()){
echo $queue->current(),"
";
$queue->next();
}