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实现mysql封装类示例
May 07 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
Redis构建分布式锁
Mar 28 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP开发实现快递查询功能详解
Apr 08 PHP
PHP实现简单的计算器
Aug 28 PHP
php框架知识点的整理和补充
Mar 01 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使用者状态管理功能的应用
2006/10/09 PHP
实用函数4
2007/11/08 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
python实现简单遗传算法
2018/03/19 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
基于python 凸包问题的解决
2020/04/16 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
女方回门宴答谢词
2014/01/14 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
毕业感言怎么写
2015/07/31 职场文书
寒假致家长的一封信
2015/10/10 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers