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初学者头痛的十四个问题
Jul 12 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
php文件上传的例子及参数详解
Dec 12 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP实现的简单缓存类
Jul 29 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 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 header下载函数
2014/01/31 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
用js实现放大镜效果
2020/10/28 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
意大利单身交友网站:Meetic
2020/07/12 全球购物
业务经理岗位职责
2013/11/11 职场文书
高中生家长寄语大全
2014/04/03 职场文书
美容院经理岗位职责
2014/04/03 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
党员演讲稿
2014/09/04 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
党员心得体会范文2016
2016/01/23 职场文书
win10清理dns缓存
2022/04/19 数码科技