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 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
php 禁止页面缓存输出
Jan 07 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
深入php处理整数函数的详解
Jun 09 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 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
URL Rewrite的设置方法
2007/01/02 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
微信支付开发告警通知实例
2016/07/12 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
举例详解Python中yield生成器的用法
2015/08/05 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
社会实践自我鉴定
2013/11/07 职场文书
销售文员岗位职责
2013/11/29 职场文书
培训师岗位职责
2015/02/14 职场文书
车间统计员岗位职责
2015/04/14 职场文书
旅游项目合作意向书
2015/05/08 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL