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 源代码压缩小工具
Dec 22 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
php中stream(流)的用法
Mar 25 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
PHP addcslashes()函数讲解
Feb 03 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
如何在PHP中读写文件
2020/09/07 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
vue组件name的作用小结
2018/05/23 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
python抓取网页内容示例分享
2014/02/24 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
实习自我鉴定范文
2013/10/30 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
销售人员工作自我评价
2014/09/21 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
话题作文之成长
2019/12/09 职场文书