Maison > développement back-end > tutoriel php > Exemple détaillé de la fonction de classement des membres de PHP basée sur des listes doublement chaînées et des opérations de tri

Exemple détaillé de la fonction de classement des membres de PHP basée sur des listes doublement chaînées et des opérations de tri

小云云
Libérer: 2023-03-18 16:28:01
original
1338 Les gens l'ont consulté

Cet article présente principalement la fonction de classement des membres de PHP basée sur des listes doublement liées et des opérations de tri. Il analyse les fonctions et définitions des listes doublement liées PHP et les compétences de mise en œuvre associées des listes doublement liées basées sur des opérations de tri sous forme d'exemples. . Les amis dans le besoin peuvent se référer à Suivant

L'exemple de cet article décrit la fonction de classement des membres implémentée par PHP basée sur des listes doublement chaînées et des opérations de tri. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

La liste doublement chaînée est également appelée liste doublement chaînée, qui est un type de liste chaînée. Chacun de ses nœuds de données a deux pointeurs, pointant vers le. respectivement successeur direct et prédécesseur direct. Par conséquent, à partir de n’importe quel nœud de la liste doublement chaînée, vous pouvez facilement accéder à ses nœuds prédécesseur et successeur. Si vous ne connaissez pas le concept, recherchez-le vous-même.


<?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);
?>
Copier après la connexion

Résultats d'exécution :


Classement des membres....
id=1 username=老王
id=2 username=Xiao Ming
id=3 username=Shizuka
id=6 username=Big Bear
id=56 username=Sun Erniang

Membres supprimés Classement list....
L'identifiant du membre à supprimer est 3
id=1 username=老王
id=2 username=Xiao Ming
id=6 username=Big Bear
id = 56 username=Sun Erniang

Le test suivant consiste à supprimer le premier et le dernier membres

La liste de classement des membres après suppression....
L'identifiant du membre à supprimer est 1
id=2 username=Xiao Ming
id=6 username=Big Bear
id=56 username=Sun Erniang

Le classement des membres après suppression....
L'identifiant du membre à supprimer Il est 56
id=2 username=Xiao Ming
id=6 username=Big Bear

Recommandations associées :

Implémentation de liste chaînée doublement chaînée JavaScript et de liste chaînée doublement circulaire

Exemple de partage de code pour l'implémentation de liste chaînée doublement Java

Un exemple de code pour PHP implémentation de liste doublement chaînée

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal