>백엔드 개발 >PHP 튜토리얼 >이중 연결 목록 및 정렬 작업을 기반으로 하는 PHP의 회원 순위 기능에 대한 자세한 예

이중 연결 목록 및 정렬 작업을 기반으로 하는 PHP의 회원 순위 기능에 대한 자세한 예

小云云
小云云원래의
2017-12-27 14:19:561364검색

이 글에서는 주로 이중 연결 목록과 정렬 연산을 기반으로 한 PHP의 멤버 순위 기능을 소개하고, 정렬 연산을 기반으로 하는 PHP 이중 연결 목록의 기능과 정의를 예제 형식으로 분석합니다. 필요하신 분들은 참고하세요

본 글의 예시에서는 이중 연결 리스트와 정렬 연산을 기반으로 PHP에서 구현한 회원 순위 기능을 설명합니다. 참조를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

양방향 연결 목록은 연결 목록의 일종인 이중 연결 목록이라고도 합니다. 각 데이터 노드에는 다음을 가리키는 두 개의 포인터가 있습니다. 각각 직속 후임과 직속 전임자. 따라서 이중 연결 목록의 모든 노드에서 시작하면 이전 노드와 후속 노드에 쉽게 액세스할 수 있습니다. 개념을 모르시면 직접 검색해 보세요.


<?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 사용자 이름=老王
id=2 사용자 이름=Xiao Ming
id=3 사용자 이름=Shizuka
id=6 사용자 이름= Daxiong
id=56 username=Sun Erniang

삭제 후 회원 순위...
삭제할 회원 ID는 3
id=1 username=Lao Wang
id=2 username=Xiao Ming
id=6 username= Daxiong
id=56 사용자 이름=Sun Erniang

다음 테스트는 첫 번째와 마지막 멤버를 삭제하는 것입니다

삭제 후 멤버 순위...
삭제할 멤버 ID는 1
id=2 사용자 이름=Xiao Ming
id입니다 =6 username=빅베어
id=56 username=쑨얼니앙

삭제 후 회원순위 목록...
삭제할 회원ID는 56
id=2 username=샤오밍
id=6 사용자이름=빅베어

관련 권장 사항:

JavaScript에서 이중 연결 목록 및 이중 순환 연결 목록 구현

Java 이중 연결 목록 구현의 샘플 코드 공유

이중 연결 목록의 PHP 구현 예제 코드

위 내용은 이중 연결 목록 및 정렬 작업을 기반으로 하는 PHP의 회원 순위 기능에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.