## 簡述
雙鏈表是一種重要的線性存儲結構,對于雙鏈表中的每個節點,不僅僅存儲自己的信息,還要保存前驅和后繼節點的地址。
![2516436194.png-28.6kB][1]
## 類摘要
```php
SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
public __construct ( void )
public void add ( mixed $index , mixed $newval )
//雙鏈表的頭部節點
public mixed top ( void )
//雙鏈表的尾部節點
public mixed bottom ( void )
//雙聯表元素的個數
public int count ( void )
//檢測雙鏈表是否為空
public bool isEmpty ( void )
//當前節點索引
public mixed key ( void )
//移到上條記錄
public void prev ( void )
//移到下條記錄
public void next ( void )
//當前記錄
public mixed current ( void )
//將指針指向迭代開始處
public void rewind ( void )
//檢查雙鏈表是否還有節點
public bool valid ( void )
//指定index處節點是否存在
public bool offsetExists ( mixed $index )
//獲取指定index處節點值
public mixed offsetGet ( mixed $index )
//設置指定index處值
public void offsetSet ( mixed $index , mixed $newval )
//刪除指定index處節點
public void offsetUnset ( mixed $index )
//從雙鏈表的尾部彈出元素
public mixed pop ( void )
//添加元素到雙鏈表的尾部
public void push ( mixed $value )
//序列化存儲
public string serialize ( void )
//反序列化
public void unserialize ( string $serialized )
//設置迭代模式
public void setIteratorMode ( int $mode )
//獲取迭代模式SplDoublyLinkedList::IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style)
public int getIteratorMode ( void )
//雙鏈表的頭部移除元素
public mixed shift ( void )
//雙鏈表的頭部添加元素
public void unshift ( mixed $value )
}
```
- 實現了Iterator接口,可以快速實現迭代;
- 實現了 ArrayAccess 接口, 可以如數組般訪問鏈表數據;
```php
$list = new SplDoublyLinkedList();
$list->push('a');
$list->push('b');
$list->push('c');
$list->push('d');
# 方法看看名稱就能理解了,主要介紹以下幾個地方;
/*
# 此時的鏈表結構
[0] => a
[1] => b
[2] => c
[3] => d
*/
$list->add(1,'z');
// 由于實現了接口ArrayAccess所以可以像操作數組那樣操作數據;
echo $list[2];
/*
# 此時的鏈表結構
[0] => a
[1] => z
[2] => b
[3] => c
[4] => d
*/
//設置一個迭代模式進行迭代↓↓;
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
$iteratorMode = $list->getIteratorMode(); //獲取當前的迭代模式
/*
# 關于模式
IT_MODE_LIFO: Stack style, 后入先出,堆結構
IT_MODE_FIFO: Queue style, 先入先出,隊列結構(默認)
IT_MODE_DELETE: Elements are deleted by the iterator 一邊迭代,一邊刪除
IT_MODE_KEEP: Elements are traversed by the iterator 普通迭代,不刪除(默認)
*/
// ↓↓設置是否在迭代的時候刪除元素
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current()."\n";
}
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current()."\n";
}
```
其他的方法手冊看看名稱都能理解,就不說明了:
http://php.net/manual/zh/class.spldoublylinkedlist.php
[1]: http://static.zybuluo.com/a5635268/1s8vqnhjrafpqqhxxlkzvoi5/2516436194.png
- 現代化PHP特性
- php7常用特性整理
- 反射機制Reflection
- 依賴注入與服務容器
- 抽象類與接口
- 類多繼承的替代方案Traits
- 類的延遲綁定(后期綁定)
- 生成器語法
- 匿名函數和閉包
- 匿名類
- 理解php的output buffer
- 斷言ASSERT
- 魔術方法小結
- Zend Opcache字節碼緩存
- 內置的http服務器
- SPL標準庫
- 【SPL標準庫專題(1)】SPL簡介
- 【SPL標準庫專題(2)】Iterator
- 【SPL標準庫專題(3)】Classes
- 【SPL標準庫專題(4)】Exceptions
- 【SPL標準庫專題(5)】Datastructures:SplDoublyLinkedList
- 【SPL標準庫專題(6)】Datastructures:SplStack & SplQueue
- 【SPL標準庫專題(7)】Datastructures:SplPriorityQueue
- 【SPL標準庫專題(8)】Datastructures:SplHeap & SplMaxHeap & SplMinHeap
- 【SPL標準庫專題(9)】Datastructures:SplFixedArray
- 【SPL標準庫專題(10)】Datastructures:SplObjectStorage
- PHPcomposer使用手札[ing]
- PHP中的多態
- 通過命名空間實現自動加載的框架雛形
- 日期與金額
- PHPstorm使用攻略
- 筆記本