<?php /*** * 單鏈表 */ //節點,下標,節點名稱,下一個節點的地址 class Node { public $id; public $name; public $next; public function __construct($id, $name) { $this->id = $id; $this->name = $name; $this->next = null; } } class SingleLinkList { private $header; public function __construct($id=null,$name=null) { $this->header=new Node($id,$name); } /** * 獲取單鏈表的長度 */ public function getLinkLength(){ $i = 0; $current = $this->header; while($current->next !=null){ $i++; $current = $current->next; } return $i; } /** * 添加節點到單鏈表中(原理就是插入當前的節點的位置存儲的下一個節點的信息,上一個節點存儲當前節點的信息) * @param $node 節點 */ 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; } /** * 刪除節點(刪除的節點的下一個位置保持在上一個節點中) * @param $id */ 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.'的信息'; } } /** * 判斷單鏈表是否爲空 * @return bool */ 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.',節點名稱爲'.$current->next->name.'<br/>'; if($current->next->next == null){ break; } $current=$current->next; } } /** * 獲取某個節點信息 * @param $id * @return string */ public function getLinkNameById($id){ $current = $this->header; if($current->next==null){ return ''; } while($current->next != null){ if($current->id == $id){ return $current->name; } $current=$current->next; } } /** * 更新某個節點名稱 * @param $id * @param $name */ public function updateLink($id,$name){ $current = $this->header; if($current->next==null){ return ''; } while($current->next != null){ if($current->id == $id){ return $current->name=$name; } $current=$current->next; } } } header('Content-Type:text/html;charset=utf8'); $lists = new SingleLinkList(); $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 $lists->getLinkNameById ( 4 ); echo "<br>-----------獲取鏈表長度--------------<br>"; echo $lists->getLinkLength ();