使用PHP實現單鏈表

來源:互聯網
上載者:User
這篇文章主要介紹了關於使用PHP實現單鏈表 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

單鏈表顧名思義就是一個鏈式資料結構,它有一個表頭,並且除了最後一個節點外,所有節點都有其後繼節點。如。

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



[php] view plain copy


  1. //鏈表節點   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指標指向後一個節點,並返回被刪除元素的資料內容,如右側所示。



[php] view plain copy


  1. //單鏈表   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.