PHP模拟链表操作

一、总结

1、类成员用的是->

2、对象节点相连的话因为是对象,所以不用取地址符号

3、数组传递参数的时候传引用的方法 ,&

二、PHP模拟链表操作

代码一:

  1. /**
  2. * Class Node
  3. * PHP模拟链表的基本操作
  4. */
  5. class Node{
  6. public $data = '';
  7. public $next = null;
  8. }
  9. //初始化
  10. function init($linkList){
  11. $linkList->data = 0; //用来记录链表长度
  12. $linkList->next = null;
  13. }
  14. //头插法创建链表
  15. function createHead(&$linkList,$length){
  16. for($i=0;$i<$length;$i++){
  17. $newNode = new Node();
  18. $newNode->data = $i;
  19. $newNode->next = $linkList->next;//因为PHP中对象本身就是引用所以不用再可用“&”
  20. $linkList->next = $newNode;
  21. $linkList->data++;
  22. }
  23. }
  24. //尾插法创建链表
  25. function createTail(&$linkList,$length){
  26. $r = $linkList;
  27. for($i=0;$i<$length;$i++){
  28. $newNode = new Node();
  29. $newNode->data = $i;
  30. $newNode->next = $r->next;
  31. $r->next = $newNode;
  32. $r = $newNode;
  33. $linkList->data++;
  34. }
  35. }
  36. //在指定位置插入指定元素
  37. function insert($linkList,$pos,$elem){
  38. if($pos<1 && $pos>$linkList->data+1){
  39. echo "插入位置错误!";
  40. }
  41. $p = $linkList;
  42. for($i=1;$i<$pos;$i++){
  43. $p = $p->next;
  44. }
  45. $newNode = new Node();
  46. $newNode->data = $elem;
  47. $newNode->next = $p->next;
  48. $p->next = $newNode;
  49. }
  50. //删除指定位置的元素
  51. function delete($linkList,$pos){
  52. if($pos<1 && $pos>$linkList->data+1){
  53. echo "位置不存在!";
  54. }
  55. $p = $linkList;
  56. for($i=1;$i<$pos;$i++){
  57. $p = $p->next;
  58. }
  59. $q = $p->next;
  60. $p->next = $q->next;
  61. unset($q);
  62. $linkList->data--;
  63. }
  64. //输出链表数据
  65. function show($linkList){
  66. $p = $linkList->next;
  67. while($p!=null){
  68. echo $p->data." ";
  69. $p = $p->next;
  70. }
  71. echo '<br/>';
  72. }
  73.  
  74. $linkList = new Node();
  75. init($linkList);//初始化
  76. createTail($linkList,10);//尾插法创建链表
  77. show($linkList);//打印出链表
  78. insert($linkList,3,'a');//插入
  79. show($linkList);
  80. delete($linkList,3);//删除
  81. show($linkList);

代码2:

PHP模拟链表操作的更多相关文章

  1. 2019牛客暑期多校训练营(第三场) J LRU management 模拟链表操作

    输入n, m,n表示n种操作,m表示最多可以容纳m个串. 第一种操作:先在容器里找是否存在这个串,如果不存在,则添加在末尾,这个串携带了一个值v. 如果存在,则先把之前存在的那个拿出来,然后在后面添加 ...

  2. UVa12657 - Boxes in a Line(数组模拟链表)

    题目大意 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.你可以执行四种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y ...

  3. hdu5009 Paint Pearls (DP+模拟链表)

    http://acm.hdu.edu.cn/showproblem.php?pid=5009 2014网络赛 西安 比较难的题 Paint Pearls Time Limit: 4000/2000 M ...

  4. CF 552(div 3) E Two Teams 线段树,模拟链表

    题目链接:http://codeforces.com/contest/1154/problem/E 题意:两个人轮流取最大值与旁边k个数,问最后这所有的数分别被谁给取走了 分析:看这道题一点思路都没有 ...

  5. C - Boxes in a Line 数组模拟链表

    You have n boxes in a line on the table numbered 1 . . . n from left to right. Your task is to simul ...

  6. C++模拟链表

    C++模拟链表 简易模拟链表,工厂设计模式.. 注意:请不要在操作时产生环状链表,会造成输出链表时陷入无限循环. #include <iostream> #include <stri ...

  7. UVA11988:悲剧文本(模拟链表)

    You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem wi ...

  8. FZU 1492 地震预测(模拟链表的应用)(Java实现)

    FZU 1492 地震预测(模拟链表的应用)(Java实现) 怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生. 假设已知一 ...

  9. HTML 事件(四) 模拟事件操作

    本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4.  ...

随机推荐

  1. 详解:Linux Chrony 设置服务器集群同步时间

    导读: Chrony是一个开源的自由软件,像CentOS 7或基于RHEL 7操作系统,已经是默认服务,默认配置文件在 /etc/chrony.conf 它能保持系统时间与时间服务器(NTP)同步,让 ...

  2. 使用UltraEdit配置多行注释和取消多行注释

    UltraEdit功能强大,使用方便,成为软件开发者必备的文档和代码编辑工具.有很多人也直接用它来写代码,如C/Java,脚本如:Perl/Tcl/JavaScript 等. 如果用来写代码,有一个不 ...

  3. 编译安装 gcc 4.9并验证使用

    编译安装 gcc 4.9并验证使用 1. 准备环境(GCC 编译器) centOS 6.3 cat /proc/version Linux version 2.6.32-279.el6.x86_64 ...

  4. [Python] Problem with Default Arguments

    Default arguments are a helpful feature, but there is one situation where they can be surprisingly u ...

  5. 【HDU】5249-KPI(线段树+离散化)

    好久没写线段树都不知道怎么写了... 很easy的线段树二分问题 #include<cstdio> #include<set> #include<queue> #i ...

  6. 59.node的serve-favicon中间件的使用

    转自:https://www.zhi-jie.net/node-serve-favicon-use/ 有一个名称为serve-favicon的中间件,可以用于请求网页的favicon图标.譬如如下的使 ...

  7. MyBatis映射

    mybatis-config.xml映射文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...

  8. Mvc异步

    <h3>MVC 自带的yibu请求</h3> <%-- 1.要执行的方法,2.控制器,3.Ajax操作--%> <%using (Ajax.BeginForm ...

  9. thuwc9102划水记

    thuwc9102划水记 Day -2 时隔两个月之后终于回一次家,心情非常愉悦,开始浪. Day 0 晚上回到学校,然而机房里并没多少人,大佬们明天才回来.╮(╯▽╰)╭ Day 1 中午饭菜挺好吃 ...

  10. win8用久了变得非常慢, 磁盘占用100%

    完美解决方式:  直接重装win7 完美解决这个问题 在网上查了非常久也没找到有效方法, 求教