[关闭]
@a5635268 2016-02-22T09:46:32.000000Z 字数 2091 阅读 1162

【SPL标准库专题(4)】 Datastructures:SplDoublyLinkedList

SPL


简述

双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。

2516436194.png-28.6kB

类摘要

  1. SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
  2. public __construct ( void )
  3. public void add ( mixed $index , mixed $newval )
  4. //双链表的头部节点
  5. public mixed top ( void )
  6. //双链表的尾部节点
  7. public mixed bottom ( void )
  8. //双联表元素的个数
  9. public int count ( void )
  10. //检测双链表是否为空
  11. public bool isEmpty ( void )
  12. //当前节点索引
  13. public mixed key ( void )
  14. //移到上条记录
  15. public void prev ( void )
  16. //移到下条记录
  17. public void next ( void )
  18. //当前记录
  19. public mixed current ( void )
  20. //将指针指向迭代开始处
  21. public void rewind ( void )
  22. //检查双链表是否还有节点
  23. public bool valid ( void )
  24. //指定index处节点是否存在
  25. public bool offsetExists ( mixed $index )
  26. //获取指定index处节点值
  27. public mixed offsetGet ( mixed $index )
  28. //设置指定index处值
  29. public void offsetSet ( mixed $index , mixed $newval )
  30. //删除指定index处节点
  31. public void offsetUnset ( mixed $index )
  32. //从双链表的尾部弹出元素
  33. public mixed pop ( void )
  34. //添加元素到双链表的尾部
  35. public void push ( mixed $value )
  36. //序列化存储
  37. public string serialize ( void )
  38. //反序列化
  39. public void unserialize ( string $serialized )
  40. //设置迭代模式
  41. public void setIteratorMode ( int $mode )
  42. //获取迭代模式SplDoublyLinkedList::IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style)
  43. public int getIteratorMode ( void )
  44. //双链表的头部移除元素
  45. public mixed shift ( void )
  46. //双链表的头部添加元素
  47. public void unshift ( mixed $value )
  48. }
  1. $list = new SplDoublyLinkedList();
  2. $list->push('a');
  3. $list->push('b');
  4. $list->push('c');
  5. $list->push('d');
  6. # 方法看看名称就能理解了,主要介绍以下几个地方;
  7. /*
  8. # 此时的链表结构
  9. [0] => a
  10. [1] => b
  11. [2] => c
  12. [3] => d
  13. */
  14. $list->add(1,'z');
  15. // 由于实现了接口ArrayAccess所以可以像操作数组那样操作数据;
  16. echo $list[2];
  17. /*
  18. # 此时的链表结构
  19. [0] => a
  20. [1] => z
  21. [2] => b
  22. [3] => c
  23. [4] => d
  24. */
  25. //设置一个迭代模式进行迭代↓↓;
  26. $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
  27. $iteratorMode = $list->getIteratorMode(); //获取当前的迭代模式
  28. /*
  29. # 关于模式
  30. IT_MODE_LIFO: Stack style, 后入先出,堆结构
  31. IT_MODE_FIFO: Queue style, 先入先出,队列结构(默认)
  32. IT_MODE_DELETE: Elements are deleted by the iterator 一边迭代,一边删除
  33. IT_MODE_KEEP: Elements are traversed by the iterator 普通迭代,不删除(默认)
  34. */
  35. // ↓↓设置是否在迭代的时候删除元素
  36. $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);
  37. for ($list->rewind(); $list->valid(); $list->next()) {
  38. echo $list->current()."\n";
  39. }
  40. for ($list->rewind(); $list->valid(); $list->next()) {
  41. echo $list->current()."\n";
  42. }

其他的方法手册看看名称都能理解,就不说明了:
http://php.net/manual/zh/class.spldoublylinkedlist.php

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注