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 相关文章推荐
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
php中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
PHP的加密方式及原理
Jun 14 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php操作memcache缓存方法分享
Jun 03 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
php简单复制文件的方法
May 09 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 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实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
法学专业个人求职信
2013/09/26 职场文书
七年级政治教学反思
2014/02/03 职场文书
创业计划书如何编写
2014/02/06 职场文书
三方股份合作协议书
2014/10/13 职场文书
会议简讯范文
2015/07/20 职场文书
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang