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函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php比较两个绝对时间的大小
Jan 31 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
Sep 14 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
Laravel多域名下字段验证的方法
Apr 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
php 问卷调查结果统计
2015/10/08 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
JavaScript 变量命名规则
2009/09/23 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
艺术用品:Arteza
2018/11/25 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
协议书范本
2014/04/23 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
写给导师的自荐信
2015/03/06 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
详解Laravel制作API接口
2021/05/31 PHP