用PHP實現的單鏈表____PHP

來源:互聯網
上載者:User
單鏈表顧名思義就是一個鏈式資料結構,它有一個表頭,並且除了最後一個節點外,所有節點都有其後繼節點。如下圖。

首先,我們寫出鏈表節點的類。單鏈表中的每一個節點,都儲存其資料域和後驅指標

//鏈表節點 class node {     public $id; //節點id     public $name; //節點名稱     public $next; //下一節點        public function __construct($id, $name) {         $this->id = $id;         $this->name = $name;         $this->next = null;     } }
鏈表中還有兩個特別重要的方法,插入和刪除。插入需要找到插入的位置,把前一個元素的next指標指向被插入的節點,並將被插入節點的next指標指向後一個節點,如下圖左側所示。而刪除則是把前一個節點的next指標指向後一個節點,並返回被刪除元素的資料內容,如下圖右側所示。
 

//單鏈表 class singelLinkList {     private $header; //鏈表前端節點        //構造方法     public function __construct($id = null, $name = null) {         $this->header = new node ( $id, $name, null );     }     //擷取鏈表長度     public function getLinkLength() {         $i = 0;         $current = $this->header;         while ( $current->next != null ) {             $i ++;             $current = $current->next;         }         return $i;     }     //添加節點資料     public function addLink($node) {         $current = $this->header;         while ( $current->next != null ) {             if ($current->next->id > $node->id) {                 break;             }             $current = $current->next;         }         $node->next = $current->next;         $current->next = $node;     }     //刪除鏈表節點     public function delLink($id) {         $current = $this->header;         $flag = false;         while ( $current->next != null ) {             if ($current->next->id == $id) {                 $flag = true;                 break;             }             $current = $current->next;         }         if ($flag) {             $current->next = $current->next->next;         } else {             echo "未找到id=" . $id . "的節點。<br>";         }     }    //判斷連表是否為空白    public function isEmpty(){            return $this->header == null;    }    //清空鏈表    public function clear(){            $this->header = null;    }     //擷取鏈表     public function getLinkList() {         $current = $this->header;         if ($current->next == null) {             echo ("鏈表為空白!");             return;         }         while ( $current->next != null ) {             echo 'id:' . $current->next->id . '   name:' . $current->next->name . "<br>";             if ($current->next->next == null) {                 break;             }             $current = $current->next;         }     }     //擷取節點名字     public function getLinkNameById($id) {         $current = $this->header;         if ($current->next == null) {             echo "鏈表為空白!";             return;         }         while ( $current->next != null ) {             if ($current->id == $id) {                 break;             }             $current = $current->next;         }         return $current->name;     }     //更新節點名稱     public function updateLink($id, $name) {         $current = $this->header;         if ($current->next == null) {             echo "鏈表為空白!";             return;         }         while ( $current->next != null ) {             if ($current->id == $id) {                 break;             }             $current = $current->next;         }         return $current->name = $name;     } }$lists = new singelLinkList (); $lists->addLink ( new node ( 5, 'eeeeee' ) ); $lists->addLink ( new node ( 1, 'aaaaaa' ) ); $lists->addLink ( new node ( 6, 'ffffff' ) ); $lists->addLink ( new node ( 4, 'dddddd' ) ); $lists->addLink ( new node ( 3, 'cccccc' ) ); $lists->addLink ( new node ( 2, 'bbbbbb' ) ); $lists->getLinkList (); echo "<br>-----------刪除節點--------------<br>"; $lists->delLink ( 5 ); $lists->getLinkList ();echo "<br>-----------更新節點名稱--------------<br>"; $lists->updateLink ( 3, "222222" ); $lists->getLinkList ();echo "<br>-----------擷取節點名稱--------------<br>"; echo $lists->getLinkNameById ( 5 );echo "<br>-----------擷取鏈表長度--------------<br>"; echo $lists->getLinkLength (); 



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.