PHP中模拟链表和链表的基本操作示例


Posted in PHP onFebruary 27, 2016

模拟链表:

<?php 
/**
 * PHP实现链表的基本操作
 */
class linkList {
  /**
   * 姓名
   * @var string
   */
  public $name = '';
   
  /**
   * 编号
   * @var int
   */
  public $id = 0;
   
  /*
   * 引用下一个对象
   */
  public $next = null;
   
  /**
   * 构造函数初始化数据
   * @param int $id
   * @param string $name
   */
  public function __construct($id = 0, $name = '') {
    $this->name = $name;
    $this->id  = $id;
  }
   
  /**
   * 遍历链表
   */
  public static function echo_link_list($head) {
    $curr = $head;
    while ($curr->next != null) {
      echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id;
      echo '<br>';
      $curr = $curr->next;
    }
  }
   
  /**
   * 添加新节点
   */
  public static function add($head, $id, $name) {
    $curr = $head;
    $obj = new linkList($id, $name);
     
    while ($curr->next != null) {
      // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置
      if ($curr->next->id > $id) {
         
        $obj->next = $curr->next;
        $curr->next = $obj;
         
        return true;
      } else if ($curr->next->id == $id) {
         
        echo '当前Id:'.$id.'重复了,请不要继续添加了!';
        echo '<br>';
         
        return false;
      }
      $curr = $curr->next;
    }
    // 添加节点到尾部
    if ($curr->next == null) {
      $curr->next = $obj;
    }
  }
   
  /**
   * 删除节点
   */
  public static function del($head, $id) {
    $curr = $head;
     
    while($curr->next != null) {
      if ($curr->next->id == $id) {
        $curr->next = $curr->next->next;
        return true;
      }
      $curr = $curr->next;
    }
  }
   
  /**
   * 修改节点
   */
  public static function edit($head, $id, $new_name) {
    $curr = $head;
     
    while($curr->next != null) {
      if ($curr->next->id == $id) {
        $curr->next->name = $new_name;
      }
      $curr = $curr->next;
    }
  }
}
 
$head = new linkList();
linkList::add($head, 1, 'wangdk');
linkList::add($head, 2, 'sunshuzhen');
linkList::add($head, 8, 'wanghaha');
linkList::add($head, 6, 'wangchufen');
linkList::add($head, 6, 'wangchufen');
linkList::add($head, 3, 'wangdaye');
 
linkList::del($head, 1);
linkList::edit($head, 2, 'hahaha');
linkList::echo_link_list($head);
 
?>

链表的增删查改:

<?php 
/**
 * PHP实现链表的基本操作
 */
class linkList {
  /**
   * 姓名
   * @var string
   */
  public $name = '';
   
  /**
   * 编号
   * @var int
   */
  public $id = 0;
   
  /*
   * 引用下一个对象
   */
  public $next = null;
   
  /**
   * 构造函数初始化数据
   * @param int $id
   * @param string $name
   */
  public function __construct($id = 0, $name = '') {
    $this->name = $name;
    $this->id  = $id;
  }
   
  /**
   * 遍历链表
   */
  public static function echo_link_list($head) {
    $curr = $head;
    while ($curr->next != null) {
      echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id;
      echo '<br>';
      $curr = $curr->next;
    }
  }
   
  /**
   * 添加新节点
   */
  public static function add($head, $id, $name) {
    $curr = $head;
    $obj = new linkList($id, $name);
     
    while ($curr->next != null) {
      // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置
      if ($curr->next->id > $id) {
         
        $obj->next = $curr->next;
        $curr->next = $obj;
         
        return true;
      } else if ($curr->next->id == $id) {
         
        echo '当前Id:'.$id.'重复了,请不要继续添加了!';
        echo '<br>';
         
        return false;
      }
      $curr = $curr->next;
    }
    // 添加节点到尾部
    if ($curr->next == null) {
      $curr->next = $obj;
    }
  }
   
  /**
   * 删除节点
   */
  public static function del($head, $id) {
    $curr = $head;
     
    while($curr->next != null) {
      if ($curr->next->id == $id) {
        $curr->next = $curr->next->next;
        return true;
      }
      $curr = $curr->next;
    }
  }
   
  /**
   * 修改节点
   */
  public static function edit($head, $id, $new_name) {
    $curr = $head;
     
    while($curr->next != null) {
      if ($curr->next->id == $id) {
        $curr->next->name = $new_name;
      }
      $curr = $curr->next;
    }
  }
}
 
$head = new linkList();
linkList::add($head, 1, 'wangdk');
linkList::add($head, 2, 'sunshuzhen');
linkList::add($head, 8, 'wanghaha');
linkList::add($head, 6, 'wangchufen');
linkList::add($head, 6, 'wangchufen');
linkList::add($head, 3, 'wangdaye');
 
linkList::del($head, 1);
linkList::edit($head, 2, 'hahaha');
linkList::echo_link_list($head);
 
?>
PHP 相关文章推荐
MySQL相关说明
Jan 15 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
PHP文件上传原理简单分析
May 29 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
PHP代码优化技巧小结
Sep 29 PHP
php三种实现多线程类似的方法
Oct 30 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 #PHP
简单谈谈PHP中strlen 函数
Feb 27 #PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 #PHP
PHP文件缓存smarty模板应用实例分析
Feb 26 #PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 #PHP
PHP实现根据时间戳获取周几的方法
Feb 26 #PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 #PHP
You might like
基于mysql的论坛(6)
2006/10/09 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
详解jquery和vue对比
2019/04/16 jQuery
a标签调用js的方法总结
2019/09/05 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
python+opencv识别图片中的圆形
2020/03/25 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python中作用域的深入讲解
2018/12/10 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
Python 实现一个计时器
2020/07/28 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
饮料业务员岗位职责
2013/12/15 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
家长高考寄语
2015/02/27 职场文书
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript