この記事では主にPHPダブルリンクリスト(SplDoublyLinkedList)の導入と使用例に関する関連情報を紹介しますので、必要な方は参考にしてください
。二重リンクリストは重要な線形ストレージ構造であり、二重リンクリスト内の各ノードについて、それ自体の情報を保存するだけでなく、先行ノードと後続ノードのアドレスも保存します。
PHP SPL の SplDoublyLinkedList クラスは、二重リンク リストの操作を提供します。
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
|
SplDoublyLinkedList は Iterator 、 ArrayAccess 、 Countable を実装します {
パブリック __construct (無効) public void add (mixed $index ,mixed $newval ) //二重リンクリストのヘッドノード パブリックミックストップ(無効) //二重リンクリストの末尾ノード 公開ミックスボトム(void) //double テーブル要素の数 public int カウント (void) //二重リンクリストが空かどうかを確認します パブリックブールはEmpty (無効)
//現在のノードインデックス 公開混合鍵(無効) //前のレコードに移動 公開無効前 (無効) //次のレコードに移動 パブリックボイドネクスト(void) //現在の記録 公共混流(無効) //ポインタを反復の先頭に向けます パブリックボイド巻き戻し(ボイド) //二重リンクリストにノードがまだあるかどうかを確認します パブリックブール有効(無効)
// 指定されたインデックスのノードが存在するかどうか public bool offsetExists (mixed $index) //指定されたインデックスのノード値を取得します パブリック混合オフセットGet (混合 $index ) //指定されたインデックスに値を設定します public void offsetSet (mixed $index ,mixed $newval ) //指定されたインデックスにあるノードを削除します public void offsetUnset (mixed $index)
//二重リンクリストの末尾から要素をポップします パブリックミックスポップ(無効) //二重リンクリストの末尾に要素を追加します パブリック void プッシュ (混合 $value)
//シリアル化されたストレージ パブリック文字列シリアル化(void) //逆シリアル化 public void unserialize (string $serialized)
//反復モードを設定します public void setIteratorMode (int $mode) //反復モードを取得 SplDoublyLinkedList::IT_MODE_LIFO (スタック スタイル) SplDoublyLinkedList::IT_MODE_FIFO (キュー スタイル) public int getIteratorMode (void)
//二重リンクリストの先頭から要素を削除します 公開混合シフト(無効) //二重リンクリストの先頭に要素を追加します public void unshift (混合 $value)
}
|
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 |
$list = 新しい SplDoublyLinkedList(); $list->push('a'); $list->push('b'); $list->push('c');
$list->unshift('top'); $list->shift();
print_r(array( 'ポップ' => $list->pop(), 'カウント' =>$list->count(), 'isEmpty' => $list->isEmpty(), 'ボトム' => $list->bottom(), 'トップ' =>$list->top() ));
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO); print_r($list->getIteratorMode());
for($list->rewind(); $list->valid(); $list->next()) { echo $list->current().PHP_EOL; }
print_r($a = $list->serialize()); //print_r($list->unserialize($a));
$list->offsetSet(0,'新しいもの'); $list->offsetUnset(0); print_r(array( 'offsetExists' => $list->offsetExists(4), 'offsetGet' => $list->offsetGet(0),
)); print_r($list); |