各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

php数据结构之顺序链表与链式线性表的示例

管理员 2023-09-05
PHP
134

php数据结构之顺序链表与链式线性表的示例

内容导读

收集整理的这篇技术教程文章主要介绍了php数据结构之顺序链表与链式线性表的示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6452字,纯文字阅读大概需要10分钟

内容图文

这篇文章主要介绍了php数据结构之顺序链表与链式线性表,结合实例形式较为详细的分析了php实现顺序链表与链式线性表的各种常用操作技巧,需要的朋友可以参考下

本文实例讲述了php数据结构之顺序链表与链式线性表。分享给大家供大家参考,具体如下:

链表操作

1、 InitList(L):初始化链表
2、 DestroyList(L):删除连接
3、 ClearList(L):清空链表
4、 ListEmpty(L):判断是否为空
5、 ListLength(L):链表长度
6、 getElem(L,i):取出元素
7、 LocateElem(L,e):判断e是否在链表中
8、 PriorElem(L,i):前驱
9、 NextElem(L,i):后继
10、 ListInsert(L,i,e):插入元素
11、 ListDelete(L,i,):删除元素

顺序链表操作

<?phpclass ArrayList{  private $list;  private $size;  //构造函数  public function __construct(){   $this->list=array();   $this->size=0;  }  public function initList(){   $this->list=array();   $this->size=0;  }  //删除链表  public function destoryList(){   if(isset($this->list)){     unset($this->list);    $this->size=0;   }  }  //清空链表  public function clearList(){   if(isset($this->list)){    unset($this->list);   }   $this->list=array();   $this->size=0;  }  //判断链表是否为空  public function emptyList(){   if(isset($this->list)){     if($this->size=0)      return TRUE;    else     return FALSE;   }  }  //链表长度  public function lenghtList(){   if(isset($this->list)){    return $this->size;   }  }  //取元素  public function getElem($i){   if($i<1||$i>$this->size){    echo "溢出<br>";    exit();   }   if(isset($this->list)&&is_array($this->list)){    return $this->list[$i-1];   }  }  //是否在链表中  public function locateElem($e){   if(isset($this->list)&&is_array($this->list)){    for($i=0;$i<$this->size;$i++){      if($this->list[$i]==$e){       return $i+1;      }    }    return 0;   }  }  //前驱  public function priorElem($i){   if($i<1||$i>$this->size){    echo "溢出";    exit();   }   if($i==1){    echo "没有前驱";    exit();   }   if(isset($this->list)&&is_array($this->list)){    return $this->list[$i-2];   }  }  //后继  public function nextElem($i){   if($i<1||$i>$this->size){    echo "溢出";    exit();   }   if($i==$this->size){    echo "没有后继";    exit();   }   if(isset($this->list)&&is_array($this->list)){    return $this->list[$i];   }  }  //插入元素  public function insertList($i,$e){   if($i<1||$i>$this->size+1){    echo "插入元素位置有误";    exit();   }   if(isset($this->list)&&is_array($this->list)){    if($this->size==0){      $this->list[$this->size]=$e;      $this->size++;    }else{      $this->size++;      for($j=$this->size-1;$j>=$i;$j--){       $this->list[$j]=$this->list[$j-1];      }      $this->list[$i-1]=$e;    }   }  }  //删除元素  public function deleteLlist($i){   if($i<1||$i>$this->size){    echo "删除元素位置有误";    exit();   }   if(isset($this->list)&&is_array($this->list)){    if($i==$this->size){      unset($this->list[$this->size-1]);    }else{      for($j=$i;$j<$this->size;$j++){       $this->list[$j-1]=$this->list[$j];      }      unset($this->list[$this->size-1]);     }   $this->size--;   }  }  //遍历  public function printList(){   if(isset($this->list)&&is_array($this->list)){    foreach ($this->list as $value){      echo $value." ";    }    echo "<br>";   }  }}?>

链式线性表

<?phpclass LinkList {  private $head;  private $size;  private $list;  public function __construct(){   $this->head="";   $this->size=0;   $this->list=array();  }  public function initList(){   $this->head="";   $this->size=0;   $this->list=array();  }  //删除链表  public function destoryList(){   if(isset($this->list)&&isset($this->head)){    unset($this->list);    unset($this->head);   }  }  //清空链表  public function clearList(){   if(isset($this->list)){    unset($this->list);   }   $this->list=array();   $this->size=0;   $this->head="";  }  //判断链表是否为空  public function emptyList(){   if(isset($this->list)){    if($this->size==0)      returnTRUE;    else      returnFALSE;   }  }  //链表长度  public function lenghtList(){   if(isset($this->list)){    return$this->size;   }  }  //取元素  public function getElem($i){   if($i<1||$i>$this->size){    echo "溢出<br>";    exit();   }   if(isset($this->list)&&is_array($this->list)){    $j=1;    //头指针    $tmp=$this->head;    while($i>$j){      if($this->list[$tmp]['next']!=null){       $tmp=$this->list[$tmp]['next'];       $j++;      }    }    return  $this->list[$tmp]['data'];   }  }  //是否在链表中  public function locateElem($e){   if(isset($this->list)&&is_array($this->list)){    $tmp=$this->head;    while($this->list[$tmp]['data']!=$e){      if($this->list[$tmp]['next']!=null){       $tmp=$this->list[$tmp]['next'];      }else{       returnFALSE;      }    }    return TRUE;   }  }  //前驱  public function priorElem($i){   if($i<1||$i>=$this->size){    echo "溢出";    exit();   }   if($i==1){    echo "没有前驱";    exit();   }   $tmp=$this->head;   $j=1;   while($i>$j+1){    if($this->list[$tmp]['next']!=null){      $j++;      $tmp=$this->list[$tmp]['next'];    }   }   return$this->list[$tmp]['data'];  }  //后继  public function nextElem($i){   if($i<1||$i>$this->size){    echo "溢出";    exit();   }   if($i==$this->size){    echo "没有后继";    exit();   }   $j=1;   $tmp=$this->head;   while($i>=$j){    if($this->list[$tmp]['next']!=null){      $j++;      $tmp=$this->list[$tmp]['next'];    }   }   return$this->list[$tmp]['data'];  }  //插入元素:后插法  public function insertList($i,$e){   if(isset($this->list)&&is_array($this->list)){    //空表    if($this->size==0){      $this->head=$this->uuid();      $this->list[$this->head]['data']=$e;      $this->list[$this->head]['next']=NULL;      $this->size++;    }else{      if($i<1||$i>$this->size){      echo"插入元素位置有误";      exit();      }      $j=1;      $tmp=$this->head;      while($i>$j){       if($this->list[$tmp]['next']!=null){         $j++;         $tmp=$this->list[$tmp]['next'];       }      }      $find=$tmp;      $id=$this->uuid();      if($this->list[$find]['next']==null){       //尾部       $this->list[$find]['next']=$id;       $this->list[$id]['data']=$e;       $this->list[$id]['next']=null;       $this->size++;      }else{       //中间       $this->list[$id]['next']=$this->list[$find]['next'];       $this->list[$find]['next']=$id;       $this->list[$id]['data']=$e;       $this->size++;      }    }   }  }  //删除元素  public function deleteLlist($i){   if($i<1||$i>$this->size){    echo "删除元素位置有误";    exit();   }   if(isset($this->list)&&is_array($this->list)){    if($i==1){      //删除头元素      $this->head=$this->list[$this->head]['next'];    }else{      $tmp=$this->head;      $j=1;      while($i>$j+1){       if($this->list[$tmp]['next']!=null){         $j++;         $tmp=$this->list[$tmp]['next'];       }      }      //找到删除元素的前驱      $find=$tmp;      //删除的元素      if($this->list[$find]['next']!=null){       //不是最后一个元素       $delete=$this->list[$find]['next'];       $this->list[$find]['next']=$this->list[$delete]['next'];      }else{       $this->list[$tmp]['next']=null;      }    }   }  }  public function traverstList(){   $tmp=$this->head;   while($this->list[$tmp]['next']!=NULL){    $this->printList($this->list[$tmp]['data'],TRUE);    $tmp=$this->list[$tmp]['next'];   }   $this->printList($this->list[$tmp]['data'],FALSE);  }  public function printList($str,$flag){   if($flag){    echo$str."->";   }else {    echo$str."<br>";   }  }  //uuid 唯一码  public  function uuid($prefix = '') {  $chars =md5(uniqid(mt_rand(), true));  $uuid = substr($chars,0,8) . '-';  $uuid .=substr($chars,8,4) . '-';  $uuid .=substr($chars,12,4) . '-';  $uuid .=substr($chars,16,4) . '-';  $uuid .= substr($chars,20,12);  return $prefix. $uuid;  }}?>

您可能感兴趣的文章:

基于php中echo用逗号和用点号的区别详细讲解

php实现统计二进制中1的个数算法的示例

PHP开发之用微信远程遥控服务器的相关讲解

以上就是php数据结构之顺序链表与链式线性表的示例的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php数据结构之顺序链表与链式线性表的示例全部内容,希望文章能够帮你解决php数据结构之顺序链表与链式线性表的示例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

扫码关注

qrcode

QQ交谈

回顶部