php資料結構之順序鏈表與鏈式線性表的樣本

來源:互聯網
上載者:User
這篇文章主要介紹了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開發之用遠程遙控伺服器的相關講解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.