Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiele für sequentiell verknüpfte Listen und verknüpfte lineare Listen von PHP-Datenstrukturen

Beispiele für sequentiell verknüpfte Listen und verknüpfte lineare Listen von PHP-Datenstrukturen

jacklove
jackloveOriginal
2018-06-29 17:37:251597Durchsuche

Dieser Artikel stellt hauptsächlich die sequentielle verknüpfte Liste und die verknüpfte lineare Liste der PHP-Datenstruktur vor. Er analysiert detailliert die verschiedenen gängigen Betriebstechniken von PHP, um sequentielle verknüpfte Listen und verknüpfte lineare Listen in Form von Beispielen zu implementieren Kann darauf verweisen.

Das Beispiel in diesem Artikel beschreibt die sequentielle verknüpfte Liste und die verknüpfte lineare Liste der PHP-Datenstruktur. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

Verknüpfte Listenoperation

1 InitList(L): Initialisieren Sie die Verknüpfte Liste
2. DestroyList(L): Löschen Sie die Verbindung
3. ClearList(L): Löschen Sie die verknüpfte Liste
4. Bestimmen Sie, ob sie leer ist
5 (L): Länge der verknüpften Liste
6. getElem(L,i): Element herausnehmen
7, LocateElem(L,e): Bestimmen, ob e in der verknüpften Liste enthalten ist
8, PriorElem(L ,i): Vorläufer
9, NextElem(L,i): Nachfolger
10. ListInsert(L,i,e): Element einfügen
11 🎜>

Sequentielle verknüpfte Listenoperation

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

Verknüpfte lineare Tabelle

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

Artikel, die Sie interessieren könnten:

Detaillierte Erklärung der Unterschied zwischen der Verwendung von Kommas und Punkten für Echo in PHP

Beispiel für PHP-Implementierung der Zählung der Anzahl von Einsen im binären Algorithmus

Erklärung des WeChat-Fernsteuerungsservers für die PHP-Entwicklung

Das obige ist der detaillierte Inhalt vonBeispiele für sequentiell verknüpfte Listen und verknüpfte lineare Listen von PHP-Datenstrukturen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn