• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 = '', $username = ''){
        $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'br/>不能添加相同的id';
          }
          $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 'br/>要删除的成员id是'.$cur->id;
        }else{
          echo'br/>要删除的成员没有';
        }
      }
      /**
       * 遍历所有节点并输出显示
       *
       * @access public
       * @param obj head 初始节点
       */
      public static function showRank($head){
        $cur = $head->next; // 不打印空节点
        while($cur->next != null){
          echo'br/>id='.$cur->id.' '.'username='.$cur->username;
          $cur = $cur->next;
        }
        echo'br/>id='.$cur->id.' '.'username='.$cur->username;
      }
    }
    //创建一个初始节点
    $head=new Rank();
    //创建一个成员
    $rank=new Rank(1,'老王');
    Rank::addRank($head,$rank);
    $rank=new Rank(2,'小明');
    Rank::addRank($head,$rank);
    $rank=new Rank(6,'大熊');
    Rank::addRank($head,$rank);
    $rank=new Rank(3,'静香');
    Rank::addRank($head,$rank);
    $rank=new Rank(56,'孙二娘');
    Rank::addRank($head,$rank);
    echo 'br/>成员排行榜.....';
    Rank::showRank($head);
    echo'br/>';
    echo 'br/>删除后的成员排行榜.....';
    Rank::delRank($head,3);
    Rank::showRank($head);
    echo'br/>';
    echo'br/>下面测试删除最前面的和最后面的成员br/>';
    echo 'br/>删除后的成员排行榜.....';
    Rank::delRank($head,1);
    Rank::showRank($head);
    echo'br/>';
    echo 'br/>删除后的成员排行榜.....';
    Rank::delRank($head,56);
    Rank::showRank($head);
    ?>
    
    

    运行结果:

    成员排行榜.....
    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=大熊
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP小教程之实现双向链表
    • PHP实现双链表删除与插入节点的方法示例
    • PHP 双链表(SplDoublyLinkedList)简介和使用实例
    • php实现单链表的实例代码
    • PHP环形链表实现方法示例
    • PHP实现的基于单向链表解决约瑟夫环问题示例
    • PHP简单实现循环链表功能示例
    • PHP实现单链表翻转操作示例
    • PHP实现合并两个排序链表的方法
    • php基于环形链表解决约瑟夫环问题示例
    • PHP双向链表定义与用法示例
    上一篇:thinkphp5 URL和路由的功能详解与实例
    下一篇:PHP实现求连续子数组最大和问题2种解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP基于双向链表与排序操作实现的会员排名功能示例 PHP,基于,双向,链表,与,排序,