Heim  >  Artikel  >  Backend-Entwicklung  >  Detailliertes Beispiel der Mitglieder-Ranking-Funktion von PHP basierend auf doppelt verknüpften Listen und Sortiervorgängen

Detailliertes Beispiel der Mitglieder-Ranking-Funktion von PHP basierend auf doppelt verknüpften Listen und Sortiervorgängen

小云云
小云云Original
2017-12-27 14:19:561335Durchsuche

Dieser Artikel stellt hauptsächlich die Mitglieder-Ranking-Funktion von PHP basierend auf doppelt verknüpften Listen und Sortieroperationen vor. Er analysiert die Funktionen und Definitionen von doppelt verknüpften PHP-Listen und die damit verbundenen Implementierungsfähigkeiten doppelt verknüpfter Listen basierend auf Sortieroperationen . Freunde in Not können sich auf Weiter beziehen

Das Beispiel in diesem Artikel beschreibt die von PHP implementierte Mitglieder-Ranking-Funktion basierend auf doppelt verknüpften Listen und Sortiervorgängen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Eine doppelt verknüpfte Liste wird auch als doppelt verknüpfte Liste bezeichnet, bei der es sich um eine Art verknüpfte Liste handelt. Jeder ihrer Datenknoten verfügt über zwei Zeiger, die auf die verweisen direkter Nachfolger bzw. direkter Vorgänger. Daher können Sie ausgehend von jedem Knoten in der doppelt verknüpften Liste problemlos auf dessen Vorgänger- und Nachfolgerknoten zugreifen. Wenn Sie das Konzept nicht kennen, suchen Sie bitte selbst danach.


<?php
/**
 * 双向链表实现用户排行榜
 *
 * 仅用于体现思想逻辑,不具备实际参考价值
 * @author 疯狂老司机
 * @date 2016-07-07
 */
class Rank{
  /**
   * @var 指向前一个节点的引用
   */
  public $pre = null;
  /**
   * @var 指向后一个节点的引用
   */
  public $next = null;
  /**
   * @var 用户排行id
   */
  public $id;
  /**
   * @var 用户名称
   */
  public $username;
  public function __construct($id = &#39;&#39;, $username = &#39;&#39;){
    $this->id = $id;
    $this->username = $username;
  }
  /**
   * 添加成员节点方法
   *
   * @access public
   * @param obj head 初始节点
   * @param obj rank 成员节点
   */
  public static function addRank($head, $rank){
    $cur = $head; // 辅助节点
    $isExist = false; //这是一个标志位
    while($cur->next != null){
      if($cur->next->id > $rank->id){
        break;
      }else if($cur->next->id == $rank->id){
        $isExist = true;
        echo&#39;<br/>不能添加相同的id&#39;;
      }
      $cur = $cur->next;
    }
    if(!$isExist){
      if($cur->next != null){
        $rank->next = $cur->next;
      }
      $rank->pre = $cur;
      if($cur->next != null){
        $cur->next->pre = $rank;
      }
      $cur->next = $rank;
    }
  }
  /**
   * 删除成员节点方法
   *
   * @access public
   * @param obj head 初始节点
   * @param obj rankid 用户排行id
   */
  public static function delRank($head, $rankid){
    $cur = $head->next;
    $isFind = flase; // 标记位
    while($cur != null){
      if($cur->id == $rankid){
        $isFind = true;
        break;
      }
      $cur = $cur->next;
    }
    if($isFind){
      if($cur->next != null){
        $cur->next->pre = $cur->pre;
      }
      $cur->pre->next = $cur->next;
      echo &#39;<br/>要删除的成员id是&#39;.$cur->id;
    }else{
      echo&#39;<br/>要删除的成员没有&#39;;
    }
  }
  /**
   * 遍历所有节点并输出显示
   *
   * @access public
   * @param obj head 初始节点
   */
  public static function showRank($head){
    $cur = $head->next; // 不打印空节点
    while($cur->next != null){
      echo&#39;<br/>id=&#39;.$cur->id.&#39; &#39;.&#39;username=&#39;.$cur->username;
      $cur = $cur->next;
    }
    echo&#39;<br/>id=&#39;.$cur->id.&#39; &#39;.&#39;username=&#39;.$cur->username;
  }
}
//创建一个初始节点
$head=new Rank();
//创建一个成员
$rank=new Rank(1,&#39;老王&#39;);
Rank::addRank($head,$rank);
$rank=new Rank(2,&#39;小明&#39;);
Rank::addRank($head,$rank);
$rank=new Rank(6,&#39;大熊&#39;);
Rank::addRank($head,$rank);
$rank=new Rank(3,&#39;静香&#39;);
Rank::addRank($head,$rank);
$rank=new Rank(56,&#39;孙二娘&#39;);
Rank::addRank($head,$rank);
echo &#39;<br/>成员排行榜.....&#39;;
Rank::showRank($head);
echo&#39;<br/>&#39;;
echo &#39;<br/>删除后的成员排行榜.....&#39;;
Rank::delRank($head,3);
Rank::showRank($head);
echo&#39;<br/>&#39;;
echo&#39;<br/>下面测试删除最前面的和最后面的成员<br/>&#39;;
echo &#39;<br/>删除后的成员排行榜.....&#39;;
Rank::delRank($head,1);
Rank::showRank($head);
echo&#39;<br/>&#39;;
echo &#39;<br/>删除后的成员排行榜.....&#39;;
Rank::delRank($head,56);
Rank::showRank($head);
?>

Laufergebnisse:


Mitgliederrankings....
id=1 Benutzername=老王
id=2 Benutzername=Xiao Ming
id=3 Benutzername=Shizuka
id=6 Benutzername=Big Bear
id=56 Benutzername=Sun Erniang

Rangliste der gelöschten Mitglieder Liste....
Die zu löschende Mitglieds-ID ist 3
id=1 Benutzername=老王
id=2 Benutzername=Xiao Ming
id=6 Benutzername=Big Bear
id = 56 Benutzername=Sun Erniang

Der folgende Test besteht darin, das erste und das letzte Mitglied zu löschen

Die Rangliste der Mitglieder nach dem Löschen....
Die zu löschende Mitglieds-ID ist 1
id=2 Benutzername=Xiao Ming
id=6 Benutzername=Big Bear
id=56 Benutzername=Sun Erniang

Die Rangliste der Mitglieder nach dem Löschen....
Die zu löschende Mitglieds-ID ist 56
id=2 Benutzername=Xiao Ming
id=6 Benutzername=Big Bear

Verwandte Empfehlungen:

Implementierung einer doppelt verknüpften JavaScript-Liste und einer doppelt zirkulär verknüpften Liste

Beispielcode-Sharing für die Java-Implementierung einer doppelt verknüpften Liste

Ein Beispielcode für PHP Implementierung einer doppelt verknüpften Liste

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel der Mitglieder-Ranking-Funktion von PHP basierend auf doppelt verknüpften Listen und Sortiervorgängen. 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
Vorheriger Artikel:PHP-State-Mode-ProgrammierungNächster Artikel:PHP-State-Mode-Programmierung