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 相关文章推荐
PHP生成静态页面详解
Nov 19 PHP
php下实现折线图效果的代码
Apr 28 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
php session和cookie使用说明
Apr 07 PHP
最常用的8款PHP调试工具
Jul 06 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 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实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP链表操作简单示例
2016/10/15 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
python解决字典中的值是列表问题的方法
2013/03/04 Python
python实现上传下载文件功能
2020/11/19 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
地理科学专业毕业生求职信
2013/10/15 职场文书
平安工地汇报材料
2014/08/19 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
家长给老师的感谢信
2015/01/20 职场文书
通知怎么写?
2019/04/17 职场文书
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技