资讯专栏INFORMATION COLUMN

【SPL标准库专题(6)】Datastructures:SplStack & SplQueu

TigerChain / 1068人阅读

摘要:这两个类都是继承自,分别派生自的堆栈模式和队列模式所以放在一起来介绍堆栈类摘要方法重写了父类,固定为堆栈模式,然后此处只需要传或者。

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

堆栈SplStack

# 类摘要
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

 # 类摘要
 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();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31536.html

相关文章

  • SPL标准专题(8)】DatastructuresSplHeap & SplMaxHe

    摘要:堆就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆二叉树的一种实现。根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序堆排序。 堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现。根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序(堆排序)。 showImg(...

    chadLi 评论0 收藏0
  • SPL标准专题(1)】SPL简介

    摘要:什么是是标准库的缩写。根据官方定义,它是是用于解决典型问题的一组接口与类的集合。而的对象则严格以堆栈的形式描述数据,并提供对应的方法。返回所有已注册的函数。 什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写。 根据官方定义,它是a collection of interfaces and classes that are meant to solve...

    GeekGhc 评论0 收藏0
  • SPL标准专题(9)】DatastructuresSplFixedArray

    摘要:主要是处理数组相关的主要功能,与普通不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。类摘要方法导入数组,返回对象把对象数组导出为真正的数组由于是定长数组,所以超过定长就会抛出异常。 SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。 类摘要 SplF...

    lindroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<