php实现单链表(静态链表)
<?php /* * 单链表的PHP实现 * * @author zhaojiangwei * @since 2011/10/20 */ //结点类 class Node{ private $next = NULL; //下一个结点指针 private $data = NULL; //数据 public function Node($data, $next = NULL){ $this->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 < $number){ $key = $this->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; } } } }?>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号