PHP資料結構之——鏈表

來源:互聯網
上載者:User

鏈表是一種在邏輯上連續、有序的資料存放區結構(在實體儲存體單元上非連續非有序)。在我大學的時候,學習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:未添加增加節點、修改節點、刪除節點的方法,有需要可以自行添加
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.