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 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
建立动态的WML站点(一)
Oct 09 PHP
PHP mkdir()定义和用法
Jan 14 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
php把数组值转换成键的方法
Jul 13 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
php批量修改表结构实例
May 24 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 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
推荐文章系统(一)
2006/10/09 PHP
PHP开发入门教程之面向对象
2006/12/05 PHP
php中namespace use用法实例分析
2016/01/22 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
前端微信支付js代码
2016/07/25 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Python networkx包的实现
2020/02/14 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
租房协议书
2014/04/10 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
导游词怎么写
2015/02/04 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL