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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP base64+gzinflate压缩编码和解码代码
Oct 03 PHP
PHP session有效期问题
Apr 26 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
php常用的url处理函数总结
Nov 19 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
php删除数组指定元素实现代码
May 03 PHP
Laravel 验证码认证学习记录小结
Dec 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
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
清空上传控件input file的值
2010/07/03 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
python计算两个数的百分比方法
2018/06/29 Python
在python中画正态分布图像的实例
2019/07/08 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
财务会计毕业生自荐信
2013/11/02 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
任命书怎么写
2015/03/02 职场文书
毕业典礼主持词
2015/06/29 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android