温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-29 21:24:23 来源:网络 阅读:805 作者:great_yonchin 栏目:web开发
<?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: 遍历单链表的所有数据元素  *  */ class LNode{     public $data;     public $next;     public function __construct($data=null){         $this->data=$data;         $this->next=null;     } } class SingleLinkList{     public $data;     public $next;     public function __construct(){         $this->data=null;         $this->next=null;     }     //具有$num个数据元素的单链表的创建——头插法     public function CreateListHead($num){         for($i=0;$i<$num;$i++){             $node=new LNode();             $node->data=mt_rand(100,200);             $node->next=$this->next;             $this->next=$node;         }     }     //具有$num个数据元素的单链表的创建——尾插法     public function CreateListTail($num){         $tail=$this;         for($i=0;$i<$num;$i++){             $node=new LNode();             $node->data=mt_rand(100,200);             $tail->next=$node;             $tail=$node;         }         $node->next=null;     }     //销毁单链表     public function DestroyList(){         //$this相当于头指针,它指向的是头结点,$this->next相当于第一个结点         //之所以需要将$this赋值给$that,是因为$this无法用作变量进行赋值         $that=$this;         while($that){             $node=$that->next;             unset($that);             $that=$node;         }     }     //将单链表清空     public function ClearList(){         $p=$this->next;         while($p){             $node=$p->next;             unset($node);             $p=$node;         }         $this->next=null;     }     //判断单链表是否为空     public function ListEmpty(){         if($this->next){             return false;         }else{             return true;         }     }     //返回单链表中数据元素的个数     public function ListLength(){         $count=0;//初始化变量         $p=$this->next;         while($p){             $count++;             $p=$p->next;         }         return $count;     }     //返回指定位置的数据元素     public function GetElem($pos){         $count=1;         $p=$this->next;         while($p && $count<$pos){             $count++;             $p=$p->next;         }         if(!$p || $pos<$count){             return 'ERROR';         }         return $p->data;     } //    或者     public function GetElem2($pos){         $count=0;         $p=$this->next;         while($p){             $count++;             if($count==$pos){                 return $p->data;             }             $p=$p->next;         }         return 'ERROR';     }     //查找指定元素在单链表中的位序     public function LocateElem($elem){         $count=0;         $p=$this->next;         while($p){             $count++;             if($p->data==$elem){                 return $count;             }         }         return 'ERROR';     }     //获取指定元素的前面一个元素     public function PriorElem($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';     }     //获取指定元素的后面一个元素     public function NextElem($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';     }     //在指定位置之前插入一个节点元素     public function ListInsert($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';     }     //或者 这种效率会高一些     public function ListInsert2($pos,$node){         $p=$this;         $count=1;         while($p && $count<$pos){             $count++;             $p=$p->next;         }         if(!$p || $count>$pos){             return 'ERROR';         }         $node->next=$p->next;         $p->next=$node;         return 'OK';     }     //删除单链表指定位置的数据元素     public function ListDelete($pos){         $count=1;         $p=$this;         while($p && $count<$pos){             $count++;             $p=$p->next;         }         if(!$p || $count>$pos){             return 'ERROR';         }         $q=$p->next;         $p->next=$q->next;         unset($q);         return 'OK';     } //    或者     public function ListDelete2($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';     }     //单链表的遍历     public function ListTraverse(){         $arr=array();         $p=$this->next;         while($p){             $arr[]=$p->data;             $p=$p->next;         }         return $arr;     } }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI