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网上调查系统
Oct 09 PHP
PHP中的正规表达式(二)
Oct 09 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
php获取今日开始时间和结束时间的方法
Feb 27 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
php实现socket推送技术的示例
Dec 20 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 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 magic quotes的详解
2013/06/17 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
python显示生日是星期几的方法
2015/05/27 Python
Python缩进和冒号详解
2016/06/01 Python
Python微信公众号开发平台
2018/01/25 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
python 安装移动复制第三方库操作
2020/07/13 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
Python Parser的用法
2021/05/12 Python