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 相关文章推荐
如何使用PHP获取网络上文件
Oct 09 PHP
国内php原创论坛
Oct 09 PHP
PHP面向对象概念
Nov 06 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
Thinkphp单字母函数使用指南
May 08 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 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
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
JavaScript效率调优经验
2009/06/04 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
Python中实现三目运算的方法
2015/06/21 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python线程同步的实现代码
2018/10/03 Python
详解python中eval函数的作用
2019/10/22 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
我爱我班主题班会
2015/08/13 职场文书
致运动员的广播稿
2015/08/19 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
Python中异常处理用法
2021/11/27 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android