ホームページ >バックエンド開発 >PHPチュートリアル >二重リンクリストとソート操作に基づく PHP のメンバーランキング関数の詳細な例

二重リンクリストとソート操作に基づく PHP のメンバーランキング関数の詳細な例

小云云
小云云オリジナル
2017-12-27 14:19:561364ブラウズ

この記事では、主に二重リンクリストとソート操作に基づく PHP のメンバーランキング機能を紹介し、PHP 二重リンクリストの機能と定義、およびソート操作に基づく二重リンクリストの関連実装テクニックを例の形式で分析します。必要な方は参考にしてください

この記事の例では、二重リンクリストとソート操作に基づいて PHP で実装されたメンバーランキング関数について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。

双方向リンク リストは、リンク リストの一種であり、ダブル リンク リストとも呼ばれます。各データ ノードには、データ ノードを指す 2 つのポインターがあります。それぞれ直接の後継者と直接の先行者。したがって、二重リンク リスト内の任意のノードから開始して、その先行ノードおよび後続ノードに簡単にアクセスできます。概念がわからない場合は、自分で検索してください。


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

実行結果:


メンバーランキング....
id=1 username=老王
id=2 username=Xiao Ming
id=3 username=Shizuka
id=6 username= Daxiong
id=56 username=Sun Erniang

削除後のメンバーランキングは…
削除されるメンバーIDは3です
id=1 username=Lao Wang
id=2 username=Xiao Ming
id=6 username= Daxiong
id=56 username=Sun Erniang

次のテストは、最初と最後のメンバーを削除することです

削除後のメンバーランキング...
削除されるメンバーIDは1です
id=2 username=Xiao Ming
id =6 username=Big Bear
id=56 username=Sun Erniang

削除後のメンバーランキング一覧…
削除されるメンバーIDは56です
id=2 username=Xiao Ming
id=6 username=Big Bear

関連する推奨事項:

JavaScriptでの二重リンクリストと二重循環リンクリストの実装

Java二重リンクリスト実装のサンプルコード共有

二重リンクリストのPHP実装のサンプルコード

以上が二重リンクリストとソート操作に基づく PHP のメンバーランキング関数の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。