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


Posted in PHP onDecember 26, 2017

本文实例讲述了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 多个submit提交表单 处理方法
Jul 07 PHP
PHP 验证码的实现代码
Jul 17 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
PHP实现简单用户登录界面
Oct 23 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 #PHP
php-msf源码详解
Dec 25 #PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 #PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 #PHP
浅析PHP中的闭包和匿名函数
Dec 25 #PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 #PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 #PHP
You might like
php的ddos攻击解决方法
2015/01/08 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
怎样写演讲稿
2014/01/04 职场文书
打架检讨书50字
2014/01/11 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
研讨会主持词
2014/04/02 职场文书
全运会口号
2014/06/20 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
三年级学生评语大全
2014/12/26 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python