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 xml实例 留言本
Mar 20 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
php实现快速排序的三种方法分享
Mar 12 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
asp.net和php的区别点总结
Oct 10 PHP
Laravel 框架返回状态拦截代码
Oct 18 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+MySql+Ajax+jQuery实现省市区三级联动功能示例
Sep 15 #PHP
You might like
php数字转汉字代码(算法)
2011/10/08 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
小程序实现密码输入框
2020/11/16 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
别名指示符是什么
2012/10/08 面试题
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
欢送退休感言
2014/02/08 职场文书
创新比赛获奖感言
2014/02/13 职场文书
英语教师自荐信
2014/05/26 职场文书
党委班子剖析材料
2014/08/21 职场文书
承诺书模板
2014/08/30 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
前台岗位职责范本
2015/04/16 职场文书