加入收藏 | 设为首页 | 会员中心 | 我要投稿 濮阳站长网 (https://www.0393zz.cn/)- 专属主机、数据湖、操作系统、媒体智能、数据分析!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-07-15 12:19:06 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了php数据结构之顺序链表与链式线性表,结合实例形式较为详细的分析了php实现顺序链表与链式线性表的各种常用操作技巧,需要的朋友可以参考下。 本文实例讲述了php数据结构之顺序链表与链式线性表,分享给大家供大家参考,具体如下: 链表操作
  这篇文章主要介绍了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,):删除元素
 
  顺序链表操作
 
  <?php
  class 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>";
     }
    }
  }
  ?>
  链式线性表
 
  <?php
  class 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{ 

(编辑:濮阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读