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 相关文章推荐
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP调用Webservice实例代码
Jul 29 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
php去除HTML标签实例
Nov 06 PHP
php分页函数示例代码分享
Feb 24 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
PHP架构及原理知识点详解
Dec 22 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
第五节 克隆 [5]
2006/10/09 PHP
怎么使 Mysql 数据同步
2006/10/09 PHP
浅析PHP水印技术
2007/02/14 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
php实现头像上传预览功能
2017/04/27 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
wxPython学习之主框架实例
2014/09/28 Python
Python编程中的文件操作攻略
2015/10/16 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
历史专业个人求职信分享
2013/12/20 职场文书
年度考核自我鉴定
2014/02/02 职场文书
初三学习决心书
2014/03/11 职场文书
优秀广告词大全
2014/03/19 职场文书
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP