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中的串行化变量和序列化对象
Sep 05 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
字母顺序颠倒而单词顺序不变的php代码
Aug 08 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
PHP中比较时间大小实例
Aug 21 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
3种php生成唯一id的方法
Nov 23 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 PHP
php中使用websocket详解
Sep 23 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 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下统计用户在线时间的一种尝试
2010/08/26 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php身份证号码检查类实例
2015/06/18 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
Python 除法小技巧
2008/09/06 Python
Python爬豆瓣电影实例
2018/02/23 Python
python 的topk算法实例
2020/04/02 Python
药物学专业学生的自我评价
2013/10/27 职场文书
三问三解心得体会
2014/09/05 职场文书
小人国观后感
2015/06/11 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
Python re.sub 反向引用的实现
2021/07/07 Python
基于docker安装zabbix的详细教程
2022/06/05 Servers