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 相关文章推荐
JS实现php的伪分页
May 25 PHP
php学习之流程控制实现代码
Jun 09 PHP
php抽奖小程序的实现代码
Jun 18 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
php实现word转html的方法
Jan 22 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
php微信开发之关注事件
Jun 14 PHP
laradock环境docker-compose操作详解
Jul 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
做个自己站内搜索引擎
2006/10/09 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
php编程每天必学之表单验证
2016/03/01 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
护士个人年度总结范文
2015/02/13 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python