看了很久数据结构但是没有怎么用过,在网上看到了关于PHP的数据结构,学习了一下,与大家一起分享一下。上一次分享了链表,这次来补充说一下双向链表。

简短不割                                                                                                                                

  1. <?php
  2. class Hero
  3. {
  4. public $pre=null;
  5. public $no;
  6. public $name;
  7. public $next=null;
  8.  
  9. public function __construct($no='',$name='')
  10. {
  11. $this->no=$no;
  12. $this->name=$name;
  13. }
  14.  
  15. static public function addHero($head,$hero)
  16. {
  17. $cur = $head;
  18. $isExist=false;
  19. //判断目前这个链表是否为空
  20. if($cur->next==null)
  21. {
  22. $cur->next=$hero;
  23. $hero->pre=$cur;
  24. }
  25. else
  26. {
  27. //如果不是空节点,则安排名来添加
  28. //找到添加的位置
  29.  
  30. while($cur->next!=null)
  31. {
  32. if($cur->next->no > $hero->no)
  33. {
  34. break;
  35. }
  36. else if($cur->next->no == $hero->no)
  37. {
  38. $isExist=true;
  39. echo "<br>不能添加相同的编号";
  40. }
  41. $cur=$cur->next;
  42. }
  43. if(!$isExist)
  44. {
  45. if($cur->next!=null)
  46. {
  47. $hero->next=$cur->next;
  48. }
  49. $hero->pre=$cur;
  50. if($cur->next!=null)
  51. {
  52. $hero->next->pre=$hero;
  53. }
  54. $cur->next=$hero;
  55. }
  56. }
  57. }
  58.  
  59. //遍历
  60. static public function showHero($head)
  61. {
  62. $cur=$head;
  63. while($cur->next!=null)
  64. {
  65. echo "<br>编号:".$cur->next->no."名字:".$cur->next->name;
  66. $cur=$cur->next;
  67. }
  68. }
  69.  
  70. static public function delHero($head,$herono)
  71. {
  72. $cur=$head;
  73. $isFind=false;
  74. while($cur!=null)
  75. {
  76. if($cur->no==$herono)
  77. {
  78. $isFind=true;
  79. break;
  80. }
  81. //继续找
  82. $cur=$cur->next;
  83. }
  84. if($isFind)
  85. {
  86. if($cur->next!=null)
  87. {
  88. $cur->next_pre=$cur->pre;
  89. }
  90. $cur->pre->next=$cur->next;
  91. }
  92. else
  93. {
  94. echo "<br>没有找到目标";
  95. }
  96. }
  97. }
  98.  
  99. $head = new Hero();
  100. $hero1 = new Hero(1,'1111');
  101. $hero3 = new Hero(3,'3333');
  102. $hero2 = new Hero(2,'2222');
  103. Hero::addHero($head,$hero1);
  104. Hero::addHero($head,$hero3);
  105. Hero::addHero($head,$hero2);
  106. Hero::showHero($head);
  107. Hero::delHero($head,2);
  108. Hero::showHero($head);
  109. ?>

我是天王盖地虎的分割线                                                                

《PHP实现链表》传送门:http://www.cnblogs.com/yydcdut/p/3777760.html

转载请注明出处:http://www.cnblogs.com/yydcdut

PHP实现双向链表的更多相关文章

  1. 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...

  2. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  3. 剑指Offer面试题:25.二叉搜索树与双向链表

    一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...

  4. Linux 内核数据结构:Linux 双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  5. Linux 内核数据结构:双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  6. 线性表-双向链表(LinkedList)

    双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...

  7. Shuffling Machine和双向链表

    1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...

  8. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  9. javascript中的链表结构—双向链表

    1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...

  10. Java自己实现双向链表LinkList

    /** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...

随机推荐

  1. CentOS 7安装Mysql并设置开机自启动的方法

    CentOS 7不带Mysql数据库了,默认的数据库是MariaDB(Mysql的一个分支). 可以按照以下步骤手动安装Mysql数据库. 1. 下载rpm安装文件 ? 1 wget http://r ...

  2. windows下怎样使用md命令一次建立多级子目录

    在Windows系统中一次只能够创建一个子目录,在命令提示符窗口则可以一次性创建多个子目录,例如如果想在f盘创建多级子目录,则md 23\13\65\45,后面的数字随便都可以.如果想一次性删除多级目 ...

  3. thinkphp5.0模块设计

    5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改). 目录结构 标准的应用和模块目录结构如下: ├─applica ...

  4. 非洲top10人口大国2017年的人口、预期寿命、三大主粮进口量、92/08/17年的饥饿指数

  5. 【Python】闭包Closure

    原来这就是闭包啊... 还是上次面试,被问只不知掉js里面的闭包 闭包,没听过啊...什么是闭包 回来查了下,原来这货叫闭包啊...... —————————————————————————————— ...

  6. 打开tcp_tw_recycle引起的一个问题

    今天普空说了一个问题就是如果设置了tcp_tw_recycle ,那么如果客户端是NAT出来的,那么就可能会出现连接被直接rst的情况.然后我google了下,在内核列表也有人说了这个问题 https ...

  7. pool创建多进程

    这中方式用的比较多,毕竟要控制并发数量,不可能不限制并发数 #_*_coding:utf-8_*_ from multiprocessing import Pool import time def f ...

  8. ssvm和console 模板机 连接不上管理节点

    说明: cloudstack 版本http://www.shapeblue.com/packages/    并不是官方的 systemvm64template-4.6.0-vmware.ova  官 ...

  9. cf 633B A trivial problem

    Mr. Santa asks all the great programmers of the world to solve a trivial problem. He gives them an i ...

  10. 【四边形不等式】HDU3506-Monkey Party

    [题目大意] 香蕉森林里一群猴子(n<=1000)围成一圈开会,会长给他们互相介绍,每个猴子需要时间a[i].每次只能介绍相邻的两只猴子x和y认识,同时x所有认识的猴子和y所有认识的猴子也就相互 ...