[关闭]
@a5635268 2016-02-23T11:52:55.000000Z 字数 1489 阅读 1045

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

SPL


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

堆栈SplStack

3846779171.jpg-31.4kB

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

队列SplQueue

804515552.png-10.1kB

  1. # 类摘要
  2. SplQueue extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
  3. /* 方法 */
  4. __construct ( void )
  5. // 出队
  6. mixed dequeue ( void )
  7. // 入队
  8. void enqueue ( mixed $value )
  9. // 重写了父类SplDoublyLinkedList,固定为堆栈模式,然后此处只需要传IT_MODE_DELETE或者IT_MODE_KEEP。
  10. void setIteratorMode ( int $mode )
  11. //其他继承的方法
  12. }
  1. $q = new SplQueue();
  2. $q->setIteratorMode(SplQueue::IT_MODE_DELETE);
  3. //可以放任何数据类型到队列里面
  4. $q->enqueue('item1');
  5. //每次放入都是只占一个队列的位置
  6. $q->enqueue(array("FooBar", "foo"));
  7. $q->enqueue(new stdClass());
  8. $q->rewind();
  9. while($q->valid()){
  10. print_r($q->current());
  11. echo "\n";
  12. $q->next();
  13. }
  14. // 出队,先入先出,因为队列为空,所以此处报错;
  15. $q->dequeue();
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注