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 09 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
php实时倒计时功能实现方法详解
Feb 27 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
jQuery 使用个人心得
2009/02/26 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
python+pyqt5编写md5生成器
2019/03/18 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
好军嫂事迹材料
2014/01/15 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
岗位聘任书范文
2014/03/29 职场文书
励志演讲稿500字
2014/08/21 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
2014年团委工作总结
2014/11/13 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
死亡诗社观后感
2015/06/05 职场文书
招商银行工作证明
2015/06/17 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
Python中with上下文管理协议的作用及用法
2022/03/18 Python