您好,欢迎访问一九零五行业门户网

php兑现单链表(静态链表)

php实现单链表(静态链表)
data = $data; $next && $this->next = $next; } public function getdata(){ return $this->data; } public function setdata($data){ $this->data = $data; } public function getnext(){ return $this->next; } public function setnext($next){ $this->next = $next; } } //单链表类 class linklist{ private $data_list = null; //结点集 public function linklist($data = false){ $this->data_list = array(); $title = new node(null); $this->data_list[] = $title; if($data){ if(is_array($data)){ $this->addmoredata($data); }else{ $this->adddata($data); } } } //返回第n个结点的值 public function getnodebynumber($number){ return $this->data_list[$this->findkeybynumber($number)]->getdata(); } //添加一组结点 public function addmoredata($datas){ foreach($datas as $value){ $this->adddata($value); } } //添加结点统一入口,供外面调用 //$number 添加在第几个结点的后面 public function adddata($data, $number = false){ $node = new node($data); if($number === false || $number == count($this->data_list)){ $this->insertlastnode($node); }elseif($number > count($this->data_list)){ return false; }else{ $this->insertnode($node, $number); } } //插入一个结点到最后 private function insertlastnode($node){ $node->setnext(null); $lastkey = $this->findlastnode(); $insert_key = $this->insertnodeintoarray($node); $this->data_list[$lastkey]->setnext($insert_key); } //插入一个结点 private function insertnode($node, $number){ $insert_number = $this->findkeybynumber($number); $node->setnext($this->data_list[$insert_number]->getnext()); $insert_key = $this->insertnodeintoarray($node); $this->data_list[$insert_number]->setnext($insert_key); } //查找第n个结点对应的数组key private function findkeybynumber($number){ $i = $key = 0; while($i data_list[$key]->getnext(); $i ++; } return $key; } //将结点加入数组 private function insertnodeintoarray($node){ $this->data_list[] = $node; return $this->getlastkey(); } //删除结点 public function deletenode($number){ if($number == 0 || $number > count($this->data_list)){ return false; } $pre_key = $this->findkeybynumber($number - 1); $key = $this->data_list[$pre_key]->getnext(); $this->data_list[$pre_key]->setnext($this->data_list[$key]->getnext()); unset($this->data_list[$key]); } //查找某结点的前一个结点 private function getprenodekey($key){ foreach($this->data_list as $k=>$v){ if($v->getnext() == $key){ return $k; } } return false; } //打印链表 public function getdata_list(){ return $this->data_list; } //返回数组的最后一个键 private function getlastkey(){ end($this->data_list); return key($this->data_list); } //判断某个键值是否存在 private function ifexistkey($key){ if(array_key_exists($key, $this->data_list)){ return true; } return false; } //查找尾结点 public function findlastnode(){ foreach($this->data_list as $key=>$value){ if($value->getnext() === null){ return $key; } } } }?>
其它类似信息

推荐信息