PHP环形链表实现方法示例


Posted in PHP onSeptember 15, 2017

本文实例讲述了PHP环形链表实现方法。分享给大家供大家参考,具体如下:

环形链表是一种链式存储结构,类似于单链表。区别是环形链表的尾节点指向头节点。

从而形成一个环,

环形链表是一种非常灵活的存储结构,可解决许多实际问题,魔术师发牌问题和约瑟夫问题

都能利用环形链表来解决,下面是一个完整的环形链表实例,使用php来实现的(参照韩顺平老师的php算法教程)

/** 
 *  环形链表的实现
 *  
 */
class child
{
  public $no;//序号
  public $next;//指向下个节点的指针
  public function __construct($no=''){
    $this ->no = $no;
  }
}
/**
 * 创建一个环形链表
 * @param $first null  链表的头节点
 * @param $num  integer 需要添加节点的数量
 */
function create(&$first,$num)
{
  $cur = null;
  for ($i=0;$i<$num;$i++)
  {
    $child = new child($i+1);
    if ($i==0)
    {  
      $first = $child;
      $first->next = $first;//将链表的尾节点指向头节点 形成环形链表
      $cur = $first;//链表的头节点不能动 需要交给一个临时变量
    } else {
      $cur->next = $child;
      $cur->next->next = $first;//将链表的尾节点指向头节点 形成环形链表
      $cur = $cur->next;
    }
  }
}
/**
 * 遍历环形链表
 * @param $first object 环形链表的头
 * 
 */
function show ($first)
{
  //头节点不能动,交个一个临时变量
  $cur = $first;
  while ($cur->next!=$first)//当$cur->next==$first说明到了链表的最后一个节点
  {
    echo $cur->no.'</br>';
    $cur = $cur->next;
  }
  //当退出循环的时候$cur->next=$first 刚好会忽略当前节点本身的遍历 所以退出的时候还要输出一下 否则会少遍历一个节点
  echo $cur->no;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php获得文件扩展名三法
Nov 25 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
PHP 采集获取指定网址的内容
Jan 05 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php版本的cron定时任务执行器使用实例
Aug 19 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
PHP实现的链式队列结构示例
Sep 15 #PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 #PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 #PHP
visual studio code 调试php方法(图文详解)
Sep 15 #PHP
PHP简单实现模拟登陆功能示例
Sep 15 #PHP
Thinkphp开发--集成极光推送
Sep 15 #PHP
php插件Xajax使用方法详解
Aug 31 #PHP
You might like
又一个php 分页类实现代码
2009/12/03 PHP
PHP 基本语法格式
2009/12/15 PHP
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
python实现简单颜色识别程序
2020/02/19 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
擅自离岗检讨书
2014/02/11 职场文书
干部现实表现材料
2014/02/13 职场文书
党员公开承诺书范文
2014/03/25 职场文书
新年祝酒词大全
2015/08/11 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技