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. rev---将文件中的每行内容以字符为单位反序输出

    rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推.

  2. CSUOJ 1542 Flipping Parentheses

    ACM International Collegiate Programming Contest Asia Regional Contest, Tokyo, 2014–10–19 Problem G ...

  3. 洛谷 P1994 有机物燃烧

    P1994 有机物燃烧 题目背景 本来准备弄难点的,还是算了吧 题目描述 输入一种有机物,输出与氧气反应化学方程式中CO2和H2O的系数 输入输出格式 输入格式: 一行,一个字符串,表示有机物 输出格 ...

  4. 洛谷 P2558 [AHOI2002]网络传输

    P2558 [AHOI2002]网络传输 题目描述 在计算机网络中所有数据都是以二进制形式来传输的. 但是在进行较大数据的传输时,直接使用该数的二进制形式加以传输则往往传输的位数过多. 譬如要传输 1 ...

  5. Android性能优化之提高ListView性能的技巧

    ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中的ge ...

  6. C++模板类代码只能写在头文件?

      这个问题,实际上我几年前就遇到了.最近写个模板类玩的时候,再次遇到.   当我非常仔细的将定义和实现分开,在头文件中保留了最少的依赖后,一切就绪.cpp单独编过.但是当使用的时候,就会报告所有的函 ...

  7. ElasticSearch、Kibana Web管理

    ElasticSearch的Web管理 http://localhost:9200/ http://localhost:9200/cluster/health?pretty http://localh ...

  8. 轻松八步搞定Cacti配置安装(原创视频)

    轻松八步搞定Cacti配置安装 1.安装web server $sudo apt-get install apache2 验证 http://localhost 2.$sudo apt-get ins ...

  9. CString与 char *之间的转换

    http://www.cnblogs.com/watsonlong/archive/2011/04/15/2017086.html

  10. 软考之路--从生活着手,看PV怎样操作

    PV操作.是软考其中一个非常重要的考点,一听到这个名词,顿时赶脚高大上有么有,在软考的历年试题中,也不乏PV操作的身影,老师也对PV操作进行了一次讲课,那时年少.听得稀里糊涂,也不是非常理解,在小编的 ...