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 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
PHP学习之PHP表达式
Oct 09 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
获取PHP警告错误信息的解决方法
Jun 03 PHP
php获取301跳转URL简单实例
Dec 16 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
AJAX的使用方法详解
Apr 29 PHP
PHP filesize函数用法浅析
Feb 15 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 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防止站外远程提交表单的方法
2014/10/20 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
Vue中v-for的数据分组实例
2018/03/07 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
python数据类型_字符串常用操作(详解)
2017/05/30 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
pytorch数据预处理错误的解决
2020/02/20 Python
python数字类型math库原理解析
2020/03/02 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
python新手学习可变和不可变对象
2020/06/11 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
函授药学自我鉴定
2014/02/07 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
学位证书委托书
2014/09/30 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL