zoukankan      html  css  js  c++  java
  • 【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();
    
  • 相关阅读:
    simpleDateFormat日期格式转换
    repo总结
    jrtplib使用注意事项
    iOS Crash获取闪回日志和上传server
    Android自己定义组件系列【5】——高级实践(1)
    TimesTen更改CacheGroup管理用户ORACLE结束和TT结束password【TimesTen操作和维修基地】
    Cordova探险系列(三)
    libpomelo 增加编译静态库cocos2d-x xcode 工程
    flex4 一些项目使用的技术
    2015华为德州扑克入境摘要——软体project
  • 原文地址:https://www.cnblogs.com/nixi8/p/5369935.html
Copyright © 2011-2022 走看看