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 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
PHP 创建标签云函数代码
May 26 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php构造函数实例讲解
Nov 13 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 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 文本文件的读取效率
2012/02/10 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
js的一些常用方法小结
2011/06/29 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
检举信的格式及范文
2014/04/04 职场文书
超市创业计划书
2014/04/24 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL