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下载远程文件类(支持断点续传)
Nov 14 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
php创建session的方法实例详解
Jan 27 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
php面向对象编程self和static的区别
May 08 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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往windows中添加用户
2006/12/06 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
js读取配置文件自写
2014/02/11 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
python中__call__方法示例分析
2014/10/11 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
linux面试题参考答案(1)
2016/01/22 面试题
九年级家长会邀请函
2014/01/15 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
企业文化演讲稿
2014/05/20 职场文书
机关保密承诺书
2014/06/03 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
经营场所证明范本
2015/06/19 职场文书
优秀志愿者感言
2015/08/01 职场文书
员工旷工检讨书
2015/08/15 职场文书
合作意向书怎么写
2019/06/24 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python