Home >Backend Development >PHP Tutorial >Detailed explanation of the example of member ranking function implemented by PHP based on doubly linked list and sorting operation

Detailed explanation of the example of member ranking function implemented by PHP based on doubly linked list and sorting operation

jacklove
jackloveOriginal
2018-07-04 17:54:551353browse

This article mainly introduces the member ranking function of PHP based on doubly linked lists and sorting operations. It analyzes the functions and definitions of PHP doubly linked lists and related implementation skills of doubly linked lists based on sorting operations in the form of examples. Friends in need can refer to Next

The example in this article describes the member ranking function implemented by PHP based on doubly linked lists and sorting operations. Share it with everyone for your reference. The details are as follows:

A two-way linked list is also called a double linked list. It is a type of linked list. Each of its data nodes has two pointers, pointing to the direct successor and the direct predecessor. . Therefore, starting from any node in the doubly linked list, you can easily access its predecessor nodes and successor nodes. If you don’t know the concept, please search it yourself.


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


Run result:


成员排行榜.....
id=1 username=老王
id=2 username=小明
id=3 username=静香
id=6 username=大熊
id=56 username=孙二娘

删除后的成员排行榜.....
要删除的成员id是3
id=1 username=老王
id=2 username=小明
id=6 username=大熊
id=56 username=孙二娘

下面测试删除最前面的和最后面的成员

删除后的成员排行榜.....
要删除的成员id是1
id=2 username=小明
id=6 username=大熊
id=56 username=孙二娘

删除后的成员排行榜.....
要删除的成员id是56
id=2 username=小明
id=6 username=大熊



Articles you may be interested in:

Explanation of two solutions to the problem of finding the maximum sum of continuous subarrays in PHP

php Get ajax headers method and content example explanation

The most basic operation tutorial of using Queue in Laravel


The above is the detailed content of Detailed explanation of the example of member ranking function implemented by PHP based on doubly linked list and sorting operation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn