鏈表是一種在邏輯上連續、有序的資料存放區結構(在實體儲存體單元上非連續非有序)。在我大學的時候,學習C++的資料結構課程時,最先接觸的就是鏈表(大學是學渣別噴...)
那麼鏈表是怎樣的一種結構呢。
用“形象的”文字來描述就是:
node_1->node_2->node_3->node_4->...->node_n , 每一個node包含一些儲存的資料
引用百度百科的圖片:
鏈表就是這麼個東西。那麼鏈表有幾種類型呢。基本型鏈表大致可以分成以下幾種:
1,單向鏈表
2,雙向鏈表
3,單向迴圈鏈表
4,雙向迴圈鏈表
5,十字鏈表(也可以劃分為有向圖)
那麼鏈表在php是如何?的呢。話不多說,直接上代碼(一個雙向迴圈鏈表的範例,代碼low勿噴)
LinkedList.php
<?phpclass Node { public $id; public $left; public $right; public function __construct($id) { $this->id = $id; } //建立節點的左右節點關係 public function linkedNode($left_id, $right_id) { $this->left = $left_id; $this->right = $right_id; return true; }}class LinkedList { public $id; public $_list; public function __construct($id) { $this->id = $id; } //建立n個節點的雙向鏈表 public function createList($n) { if($n == 0) { return false; } else { for($i = 0; $i < $n; $i ++) { $node[$i] = new Node($i); if($i == 0) { $node[$i]->linkedNode($n-1, 1); } elseif($i == $n-1) { $node[$i]->linkedNode($i-1, 0); } else { $node[$i]->linkedNode($i-1, $i+1); } } } $this->_list = $node; return $this->_list; } //從任一節點開始遍曆整條鏈(可以選擇方向) public function iterateList($id = 0) { $list = $this->_list; $count = 0 ; $total = count($list); while($count < $total) { if($id >= $total) { echo $list[$id-$total]->id,"->"; } else { echo $list[$id]->id,"->"; } $id ++; $count ++; } echo "<br/>"; } //擷取鏈表中某一節點的資訊 public function getOneNode($id) { $list = $this->_list; if(is_null($list[$id])) { echo "Node not exist.<br/>"; } else { echo "Node Info : <br/>id : ", $list[$id]->id, "<br/>left : ", $list[$id]->left, "<br/>right : ",$list[$id]->right; echo "<br/>"; } }}$linkedList = new LinkedList(1);//建立id為1的鏈表$linkedList->createList(10);//為id為1的鏈表建立10個節點//擷取一個不存在的節點資訊$linkedList->getOneNode(20);//擷取一個存在的節點資訊$linkedList->getOneNode(2);//從一個節點的位置開始遍曆整個鏈表$linkedList->iterateList(2);
PS:未添加增加節點、修改節點、刪除節點的方法,有需要可以自行添加