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 相关文章推荐
网络资源
Oct 09 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
php短域名转换为实际域名函数
Jan 17 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
php获取汉字首字母的函数
Nov 07 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
smarty简单入门实例
Nov 28 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
php简单检测404页面的方法示例
Aug 23 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 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获取表单所有复选框的值的方法
2014/08/28 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
详解Python中的四种队列
2018/05/21 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
2014年数学教研组工作总结
2014/12/06 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android