700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php数据结构链表代码 数据结构之线性表——链式存储结构之单链表(php代码实现)...

php数据结构链表代码 数据结构之线性表——链式存储结构之单链表(php代码实现)...

时间:2024-05-14 09:50:15

相关推荐

php数据结构链表代码 数据结构之线性表——链式存储结构之单链表(php代码实现)...

/**

*

*1.类LNode用作创建单链表时,生成新的节点。

*2.类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表)

*3.CreateListHead:具有$num个数据元素的单链表的创建——头插法

*4.CreateListTail:具有$num个数据元素的单链表的创建——尾插法

*5.DestroyList:销毁单链表

*6.ClearList:清空单链表

*7.ListEmpty:判断单链表是否为空

*8.ListLength:返回单链表数据元素的个数

*9.GetElem:返回单链表中指定位置的数据元素

*10.LocateElem:查找指定元素在单链表中的位序

*11.PriorElem:获取指定元素的前面一个元素

*12.NextElem:获取指定元素的后面一个元素

*13.ListInsert:在指定位置之前插入一个数据元素

*14.ListDelete:删除指定位置的数据元素

*15.ListTraverse:遍历单链表的所有数据元素

*

*/

classLNode{

public$data;

public$next;

publicfunction__construct($data=null){

$this->data=$data;

$this->next=null;

}

}

classSingleLinkList{

public$data;

public$next;

publicfunction__construct(){

$this->data=null;

$this->next=null;

}

//具有$num个数据元素的单链表的创建——头插法

publicfunctionCreateListHead($num){

for($i=0;$i

$node=newLNode();

$node->data=mt_rand(100,200);

$node->next=$this->next;

$this->next=$node;

}

}

//具有$num个数据元素的单链表的创建——尾插法

publicfunctionCreateListTail($num){

$tail=$this;

for($i=0;$i

$node=newLNode();

$node->data=mt_rand(100,200);

$tail->next=$node;

$tail=$node;

}

$node->next=null;

}

//销毁单链表

publicfunctionDestroyList(){

//$this相当于头指针,它指向的是头结点,$this->next相当于第一个结点

//之所以需要将$this赋值给$that,是因为$this无法用作变量进行赋值

$that=$this;

while($that){

$node=$that->next;

unset($that);

$that=$node;

}

}

//将单链表清空

publicfunctionClearList(){

$p=$this->next;

while($p){

$node=$p->next;

unset($node);

$p=$node;

}

$this->next=null;

}

//判断单链表是否为空

publicfunctionListEmpty(){

if($this->next){

returnfalse;

}else{

returntrue;

}

}

//返回单链表中数据元素的个数

publicfunctionListLength(){

$count=0;//初始化变量

$p=$this->next;

while($p){

$count++;

$p=$p->next;

}

return$count;

}

//返回指定位置的数据元素

publicfunctionGetElem($pos){

$count=1;

$p=$this->next;

while($p&&$count

$count++;

$p=$p->next;

}

if(!$p||$pos

return'ERROR';

}

return$p->data;

}

//或者

publicfunctionGetElem2($pos){

$count=0;

$p=$this->next;

while($p){

$count++;

if($count==$pos){

return$p->data;

}

$p=$p->next;

}

return'ERROR';

}

//查找指定元素在单链表中的位序

publicfunctionLocateElem($elem){

$count=0;

$p=$this->next;

while($p){

$count++;

if($p->data==$elem){

return$count;

}

}

return'ERROR';

}

//获取指定元素的前面一个元素

publicfunctionPriorElem($elem){

$p=$this->next;

if($p&&$p->data=$elem){

return$p->data.'已经是第一个元素,已无前驱元素';

}

while($p&&$p->next){

$q=$p->next;

if($q->data==$elem){

return$p->data;

}

$p=$q;

}

return'ERROR';

}

//获取指定元素的后面一个元素

publicfunctionNextElem($elem){

$p=$this->next;

while($p&&$p->next){

if($p->data==$elem){

return$p->next->data;

}

$p=$p->next;

}

if($p&&$p->next==null){

return$p->data.'已经是最后一个元素,已无后继元素';

}

return'ERROR';

}

//在指定位置之前插入一个节点元素

publicfunctionListInsert($pos,$node){

$p=$this;

$count=0;

while($p){

$count++;

if($count==$pos){

$node->next=$p->next;

$p->next=$node;

return'OK';

}

$p=$p->next;

}

return'ERROR';

}

//或者这种效率会高一些

publicfunctionListInsert2($pos,$node){

$p=$this;

$count=1;

while($p&&$count

$count++;

$p=$p->next;

}

if(!$p||$count>$pos){

return'ERROR';

}

$node->next=$p->next;

$p->next=$node;

return'OK';

}

//删除单链表指定位置的数据元素

publicfunctionListDelete($pos){

$count=1;

$p=$this;

while($p&&$count

$count++;

$p=$p->next;

}

if(!$p||$count>$pos){

return'ERROR';

}

$q=$p->next;

$p->next=$q->next;

unset($q);

return'OK';

}

//或者

publicfunctionListDelete2($pos){

$count=0;

$p=$this;

//此处之所以使用$p->next,而不是$p作为判断条件是因为这样可以在链表为空的时候,少一次无谓的循环。

while($p->next){

$count++;

if($count==$pos){

$q=$p->next;

$p->next=$q->next;

unset($q);

return'OK';

}

$p=$p->next;

}

return'ERROR';

}

//单链表的遍历

publicfunctionListTraverse(){

$arr=array();

$p=$this->next;

while($p){

$arr[]=$p->data;

$p=$p->next;

}

return$arr;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。