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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP 图片文件上传实现代码
Dec 29 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 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 ADODB实现事务处理功能示例
2018/05/25 PHP
javascript 播放器 控制
2007/01/22 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
由document.body和document.documentElement想到的
2009/04/13 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
python调用webservice接口的实现
2019/07/12 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
python 创建一维的0向量实例
2019/12/02 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
python中的测试框架
2020/11/13 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
什么是URL
2015/12/13 面试题
教师辞职报告范文
2014/01/20 职场文书
教育技术职业规划范文
2014/03/04 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript