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 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
php中的常用魔术方法总结
Aug 02 PHP
php不写闭合标签的好处
Mar 04 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
win7安装php框架Yii的方法
Jan 25 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 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面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
javascript基本算法汇总
2016/03/09 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
用Python shell简化开发
2018/08/08 Python
详解python Todo清单实战
2018/11/01 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
python 自定义装饰器实例详解
2019/07/20 Python
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
开学典礼演讲稿
2014/05/23 职场文书
2014年体育部工作总结
2014/11/13 职场文书
出国签证在职证明范本
2014/11/24 职场文书
考试后的感想
2015/08/07 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python