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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
简单分析ucenter 会员同步登录通信原理
Aug 25 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
总结的一些PHP开发中的tips(必看篇)
Mar 24 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
PHP单元测试配置与使用方法详解
Dec 27 PHP
PHP实现简易用户登录系统
Jul 10 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读取IMAP邮件
2006/10/09 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
python中__slots__用法实例
2015/06/04 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
python tkinter组件摆放方式详解
2019/09/16 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
python with语句的原理与用法详解
2020/03/30 Python
keras输出预测值和真实值方式
2020/06/27 Python
python pip如何手动安装二进制包
2020/09/30 Python
乡镇党委书记个人整改措施
2014/09/15 职场文书
写给导师的自荐信
2015/03/06 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
童年读书笔记
2015/06/26 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
小学四年级作文之写景
2019/08/23 职场文书