• 【SPL标准库专题(5)】 Datastructures:SplStack & SplQueue


    这两个类都是继承自SplDoublyLinkedList,分别派生自SplDoublyLinkedList的堆栈模式和队列模式;所以放在一起来介绍;

    堆栈SplStack

    3846779171.jpg-31.4kB

    # 类摘要
    SplStack extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
      /* 方法 */
      __construct(void)
      
      // 重写了父类SplDoublyLinkedList,固定为堆栈模式,然后此处只需要传IT_MODE_DELETE或者IT_MODE_KEEP。
      void setIteratorMode(int $mode )
     
      /* 继承自SplDoublyLinkedList的方法 */
      ...
     }
    
    //把栈想象成一个颠倒的数组
    $stack = new SplStack();
    /**
     * 可见栈和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:
     * (1)SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_KEEP  (默认值,迭代后数据保存)
     * (2)SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_DELETE (迭代后数据删除)
     */
    $stack->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_DELETE);
    $stack->push('a');
    $stack->push('b');
    $stack->push('c');
    $stack->offsetSet(0, 'first');//index 为0的是最后一个元素,后入后出
    $stack->pop(); //出栈
    foreach($stack as $item) {
      echo $item . PHP_EOL; // first a
    }
    print_R($stack); //测试IteratorMode
    

    队列SplQueue

    804515552.png-10.1kB

     # 类摘要
     SplQueue extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
        /* 方法 */
        __construct ( void )
        
        // 出队
        mixed dequeue ( void )
        
        // 入队
        void enqueue ( mixed $value )
        
        // 重写了父类SplDoublyLinkedList,固定为堆栈模式,然后此处只需要传IT_MODE_DELETE或者IT_MODE_KEEP。
        void setIteratorMode ( int $mode )
        
        //其他继承的方法
     }
    
    $q = new SplQueue();
    
    $q->setIteratorMode(SplQueue::IT_MODE_DELETE);
    
    //可以放任何数据类型到队列里面
    $q->enqueue('item1');
    //每次放入都是只占一个队列的位置
    $q->enqueue(array("FooBar", "foo"));
    $q->enqueue(new stdClass());
    
    
    $q->rewind();
    while($q->valid()){
      print_r($q->current());
      echo "
    ";
      $q->next();
    }
    
    // 出队,先入先出,因为队列为空,所以此处报错;
    $q->dequeue();
    
  • 相关阅读:
    Java Servlet(十):JSTL核心标签库
    Java Servlet(九):转发请求与重定向请求区别
    Java tomcat启动失败(Servlet3.0 Web Project):A child container failed during start
    快速安装服务
    Java Servlet(八):EL自定义函数
    Java Servlet(七):JavaWeb MVC 操作(jdk7+tomcat7+eclipse)
    新版mysql(mysql-5.7.12-winx64)安装
    oracle之 oradebug 命令用法
    Linux 绑定双网卡
    Linux 之 NTP 服务 服务器
  • 原文地址:https://www.cnblogs.com/nixi8/p/5369935.html
Copyright © 2020-2023  润新知