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 相关文章推荐
php5编程中的异常处理详细方法介绍
Jul 29 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
php实现留言板功能(会话控制)
May 23 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
PHP PDOStatement::rowCount讲解
Feb 01 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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作的文本留言本的例子(一)
2006/10/09 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
JavaScript中的数组操作介绍
2014/12/30 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
python self,cls,decorator的理解
2009/07/13 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python中进程和线程的区别详解
2017/10/29 Python
对python的输出和输出格式详解
2018/12/08 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Django框架模板用法入门教程
2019/11/04 Python
tensorflow 实现数据类型转换
2020/02/17 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
资深地理教师自我评价
2013/09/21 职场文书
大学三年的自我评价
2013/12/25 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
中国入世承诺
2014/04/01 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
离职证明格式样本
2015/06/12 职场文书
大学生暑假实习总结
2015/07/13 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
Window server中安装Redis的超详细教程
2021/11/17 Redis