双向链表其实就是数据本身具备了左边和右边的双向指针。类似Redis的列表,它就是双向链表。
我们现在就学习一下SPL内置的SplDoublyLinkedList类。
首先介绍一下这个类都有哪些方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| $dll = new SplDoublyLinkedList();
$dll->push($value);
$dll->unshift($value);
$dll->offsetExists($key);
$dll->offsetGet($key);
$dll->offsetSet($key, $value);
$dll->offsetUnset($key);
$dll->count();
$dll->isEmpty();
$dll->serialize();
$dll->unserialize($str);
$dll->setIteratorMode($mode);
$dll->getIteratorMode();
$dll->rewind();
$dll->key();
$dll->current();
$dll->next();
$dll->prev();
$dll->valid();
$dll->bottom();
$dll->top();
$dll->pop();
$dll->shift();
$dll->add($index, $value);
|
Iterator 模式
- 迭代的方向:
SplDoublyLinkedList::IT_MODE_LIFO
(堆栈 style)
SplDoublyLinkedList::IT_MODE_FIFO
(队列 style)
- 迭代器的行为
SplDoublyLinkedList::IT_MODE_DELETE
(元素由迭代器删除)
SplDoublyLinkedList::IT_MODE_KEEP
(元素由迭代器遍历)
默认模式是:SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP