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 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
解析PHP缓存函数的使用说明
May 10 PHP
php curl的深入解析
Jun 02 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
PHP连接sql server 2005环境配置及问题解决
Aug 08 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php 删除记录实现代码
2009/03/12 PHP
如何离线执行php任务
2017/02/21 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python 多个参数不为空校验方法
2019/02/14 Python
pytorch 常用线性函数详解
2020/01/15 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
经贸日语毕业生自荐信
2013/11/03 职场文书
北京申奥口号
2014/06/19 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
关于python类SortedList详解
2021/09/04 Python