zoukankan      html  css  js  c++  java
  • php标准库中QplQueue队列如何使用?

    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 ¶

    实例

     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();
     }
  • 相关阅读:
    jvm.option是什么,它是如何加载的
    适配器模式--想象一下转换插头
    Android gradle 配置
    Android全面屏适配
    github控件地址
    TextView 链接显示及跳转
    解决java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()
    解决Android中,禁止ScrollView内的控件改变之后自动滚动
    Android跳转到应用商店的APP详情页面,以及 Google GMS 各个apk的包
    EditText小记
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9103174.html
Copyright © 2011-2022 走看看