PHP单链表的基本操作
前提
对于大多数的大一,大二的童鞋们来说,可能最操蛋的就是数据结构这个课了,什么链表,堆栈,队列,图,简直噩梦!对我也是,我也是在大三后实习后发现这个真的是个硬技能,
链表的实现
数据结构第一个就是链表了,链表分为两种有直接的数组形式的顺序链,这里不讨论,什么array_push(),array_pop(),函数基本能满足日常的需求,但报告老板,我就是想装个X
上代码吧
<?php/** *@author:gongbangwei(18829212319@163.com) *@version:1.0 *@date:2016-05-22 *单链表的基本操作 *1.初始化单链表 __construct() *2.清空单链表 clearSLL() *3.返回单链表长度 getLength() *4.判断单链表是否为空 getIsEmpty() *5.头插入法建表 getHeadCreateSLL() *6.尾插入法建表 getTailCreateSLL() *7.返回第$i个元素 getElemForPos() *8.查找单链表中是否存在某个值的元素 getElemIsExist() *9.单链表的插入操作 getInsertElem() *10.遍历单链表中的所有元素 getAllElem() *11.删除单链中第$i个元素 getDeleteElem() *12.删除单链表所有重复的值 getElemUnique() **/ header("content-type:text/html;charset=UTF-8"); class LNode{ public $mElem; public $mNext; public function __construct(){ $this->mElem=null; $this->mNext=null; }}class SingleLinkedList{ //头结点数据 public $mElem; //下一结点指针 public $mNext; //单链表长度 public static $mLength=0; public function __construct(){ $this->mElem=null; $this->mNext=null; } //返回单链表长度 public static function getLength(){ return self::$mLength; } public function getIsEmpty(){ if(self::$mLength==0 && $this->mNext==null){ return true; } else{ return false; } } public function clearSLL(){ if(self::$mLength>0){ while($this->mNext!=null){ $q=$this->mNext->mNext; $this->mNext=null; unset($this->mNext); $this->mNext=$q; } self::$mLength=0; } } public function getHeadCreateSLL($sarr){ $this->clearSLL(); if(is_array($sarr) and count($sarr)>0){ foreach ($sarr as $key => $value) { $p= new LNode; $p->mElem=$value; $p->mNext=$this->mNext; $this->mNext=$p; self::$mLength++; } } else{ return false; } return true; } public function getTailCreateSLL($sarr){ $this->clearSLL(); if(is_array($sarr) and count($sarr)>0){ $q=$this; foreach($sarr as $value){ $p=new LNode; $p->mElem=$value; $p->mNext=$q->mNext; $q->mNext=$p; $q=$p; self::$mLength++; } } else{ return false; } } public function getElemForPos($i){ if(is_numeric($i) && $i<self::$mLength && $i>0){ $p=$this->mNext; for ($j=1; $j < $i ; $j++) { $q=$p->mNext; $p=$q; } return $p->mElem; } else{ return null; } } public function getElemIsExist($value){ if($value){ $p=$this; while($p->mNext!=null and $p->mElem!=value){ $q=$p->mNext; $p=$q; } if($p->mElem==value){ return true; } else{ return false; } } } public function getElemPosition($value){ if($value){ $p=$this; $pos=0; while($p->mNext!=null and $p->mElem!=$value){ $q=$p->mNext; $p=$q; $pos++; } if($p->mElem==$value){ return $pos; } else{ return -1; } } } /*单链表的插入操作 * *@param int $i 插入元素的位序,即在什么位置插入新的元素,从1开始 *@param mixed $e 插入的新的元素值 *@return boolean 插入成功返回true,失败返回false */ public function getInsertElem($i,$e){ if($i<self::$mLength){ $j=1; $p=$this; } else{ return false; } while($p->mNext!=null and $j<$i){ $q=$p->mNext; $p=$q; $j++; } $q=new LNode; $q->mElem=$e; $q->mNext=$p->mNext; $p->mNext=$q; self::$mLength++; return true; } /** *删除单链中第$i个元素 *@param int $i 元素位序 *@return boolean 删除成功返回true,失败返回false */ public function getDeleteElem($i){ if($i>self::$mLength || $i<1){ return false; } else{ $p=$this; $j=1; while($j<$i){ $p=$p->mNext; $j++; } $q=$p->mNext; $p->mNext=$q->mNext; unset($q); self::$mLength--; return true; } } public function getAllElem(){ $all=array(); if(!$this->getIsEmpty()){ $p=$this->mNext; while($p->mNext){ $all[]=$p->mElem; $p=$p->mNext; } if($p->mElem) $all[]=$p->mElem; return $all; } } public function getElemUnique(){ if(!$this->getIsEmpty()){ $p=$this; while($p->mNext!=null){ $q=$p->mNext; $ptr=$p; while($q->mNext!=null){ if(strcmp($p->mElem,$q->mElem)===0){ $ptr->mNext=$q->mNext; $q->mNext=null; unset($q->mNext); $q=$ptr->mNext; self::$mLength--; } else{ $ptr=$q; $q=$q->mNext; } } //处理最后一个元素 if(strcmp($p->mElem,$q->mElem)===0){ $ptr->mNext=null; self::$mLength--; } $p=$p->mNext; }//end of while } }}///////////////test//////////$node=new SingleLinkedList;$arr=array('gbw','michael','php','js');//$node->getHeadCreateSLL($arr);//print_r($node->getAllElem());$node->getTailCreateSLL($arr);echo $node->getElemForPos(2);$pos=$node->getElemPosition('gbw');echo $pos;$node->getDeleteElem($pos);$node->getInsertElem(1,'gbw2');print_r($node->getAllElem());
希望对大家的php程序设计有所帮助!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...
