Maison  >  Article  >  développement back-end  >  Exemples de listes chaînées séquentielles et de listes linéaires chaînées dans les structures de données PHP

Exemples de listes chaînées séquentielles et de listes linéaires chaînées dans les structures de données PHP

jacklove
jackloveoriginal
2018-06-29 17:37:251572parcourir

Cet article présente principalement la liste chaînée séquentielle et la liste linéaire chaînée de la structure de données PHP. Il analyse en détail les différentes techniques de fonctionnement courantes de PHP pour implémenter la liste chaînée séquentielle et la liste linéaire chaînée sous forme d'exemples. peut s'y référer. Suivant

L'exemple de cet article décrit la liste chaînée séquentielle et la liste linéaire chaînée de la structure de données PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Opération de liste chaînée

1 : Initialisez le. liste chaînée
2. DestroyList(L) : Supprimez la connexion
3. ClearList(L) : Effacez la liste chaînée
4 ListEmpty(L) : Déterminez si elle est vide
5. (L) : Longueur de la liste chaînée
6. getElem(L,i) : Supprimer l'élément
7, LocateElem(L,e) : Déterminer si e est dans la liste chaînée
8, PriorElem(L ,i) : Précurseur
9, NextElem(L,i ) : Successeur
10. ListInsert(L,i,e) : Insérer un élément
11. 🎜>

Opération de liste chaînée séquentielle

<?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>";
   }
  }
}
?>

Linéaire lié tableau

<?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][&#39;next&#39;]!=null){
       $tmp=$this->list[$tmp][&#39;next&#39;];
       $j++;
      }
    }
    return  $this->list[$tmp][&#39;data&#39;];
   }
  }
  //是否在链表中
  public function locateElem($e){
   if(isset($this->list)&&is_array($this->list)){
    $tmp=$this->head;
    while($this->list[$tmp][&#39;data&#39;]!=$e){
      if($this->list[$tmp][&#39;next&#39;]!=null){
       $tmp=$this->list[$tmp][&#39;next&#39;];
      }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][&#39;next&#39;]!=null){
      $j++;
      $tmp=$this->list[$tmp][&#39;next&#39;];
    }
   }
   return$this->list[$tmp][&#39;data&#39;];
  }
  //后继
  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][&#39;next&#39;]!=null){
      $j++;
      $tmp=$this->list[$tmp][&#39;next&#39;];
    }
   }
   return$this->list[$tmp][&#39;data&#39;];
  }
  //插入元素:后插法
  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][&#39;data&#39;]=$e;
      $this->list[$this->head][&#39;next&#39;]=NULL;
      $this->size++;
    }else{
      if($i<1||$i>$this->size){
      echo"插入元素位置有误";
      exit();
      }
      $j=1;
      $tmp=$this->head;
      while($i>$j){
       if($this->list[$tmp][&#39;next&#39;]!=null){
         $j++;
         $tmp=$this->list[$tmp][&#39;next&#39;];
       }
      }
      $find=$tmp;
      $id=$this->uuid();
      if($this->list[$find][&#39;next&#39;]==null){
       //尾部
       $this->list[$find][&#39;next&#39;]=$id;
       $this->list[$id][&#39;data&#39;]=$e;
       $this->list[$id][&#39;next&#39;]=null;
       $this->size++;
      }else{
       //中间
       $this->list[$id][&#39;next&#39;]=$this->list[$find][&#39;next&#39;];
       $this->list[$find][&#39;next&#39;]=$id;
       $this->list[$id][&#39;data&#39;]=$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][&#39;next&#39;];
    }else{
      $tmp=$this->head;
      $j=1;
      while($i>$j+1){
       if($this->list[$tmp][&#39;next&#39;]!=null){
         $j++;
         $tmp=$this->list[$tmp][&#39;next&#39;];
       }
      }
      //找到删除元素的前驱
      $find=$tmp;
      //删除的元素
      if($this->list[$find][&#39;next&#39;]!=null){
       //不是最后一个元素
       $delete=$this->list[$find][&#39;next&#39;];
       $this->list[$find][&#39;next&#39;]=$this->list[$delete][&#39;next&#39;];
      }else{
       $this->list[$tmp][&#39;next&#39;]=null;
      }
    }
   }
  }
  public function traverstList(){
   $tmp=$this->head;
   while($this->list[$tmp][&#39;next&#39;]!=NULL){
    $this->printList($this->list[$tmp][&#39;data&#39;],TRUE);
    $tmp=$this->list[$tmp][&#39;next&#39;];
   }
   $this->printList($this->list[$tmp][&#39;data&#39;],FALSE);
  }
  public function printList($str,$flag){
   if($flag){
    echo$str."->";
   }else {
    echo$str."<br>";
   }
  }
  //uuid 唯一码
  public  function uuid($prefix = &#39;&#39;) {
  $chars =md5(uniqid(mt_rand(), true));
  $uuid = substr($chars,0,8) . &#39;-&#39;;
  $uuid .=substr($chars,8,4) . &#39;-&#39;;
  $uuid .=substr($chars,12,4) . &#39;-&#39;;
  $uuid .=substr($chars,16,4) . &#39;-&#39;;
  $uuid .= substr($chars,20,12);
  return $prefix. $uuid;
  }
}
?>

Articles qui pourraient vous intéresser :

Explication détaillée de la différence entre l'utilisation de virgules et de points pour l'écho en php

Exemple de PHP implémentant l'algorithme statistique du nombre de 1 en binaire

Développement PHP à l'aide du serveur de contrôle à distance WeChat Explications associées

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn