PHP链表

链表:链表是节点的集合.每一个节点通过链表相互连接,节点可以存储任何数据结构和内容。 是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元(避免内存的浪费)

链表无非是几种固定形式:单向的,双向的,循环的,带或不带头节点的,带或不带尾节点的,熟悉一种结构,其它的类推

 

数组和链表的区别

   数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。

   链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。

 

★双向链表和单向链表的区别

①单向链表内存占用比双向的少
②在查找一个前节点,双向比单向快,因为单向链表的话,你必须从头节点开始遍历,而双向链表的节点中本身就有前节点信息

④单向链表存储结构的节点中只有一个指向后继节点的指针;
⑤双向链表的节点中有两个指针,其中一个后继节点的指针,另一个指向前一个节点的指针。

 

一、单链表

定义成员属性排名 $no

定义成员属性姓名 $name

定义成员属性昵称 $nickname

定义成员属性 $next,是一个引用,指向下一个Hero对象

定义构造函数,传递参数:$no,$name,$nickname


创建一个头head,该head只是一个头,不放入数据

获取$head对象,new Hero()

获取第一个Hero对象$hero,new Hero(1,”宋江”,”及时雨”)

连接两个对象,$head->next=$hero

获取第二个Hero对象$hero2,new Hero(2,”卢俊义”,”玉麒麟”)

连接两个对象,$hero->next=$hero2


遍历链表

定义一个函数showHeros(),参数:$head对象

定义一个临时变量$cur来存储 $head对象

while循环,条件$cur->next不为null

打印一下

指针后移,$cur=$cur->next

<?php

/**

* 英雄类

*/

class Hero{

  public $no;

  public $name;

  public $nickname;

  public $next=null;

  public function __construct($no='',$name='',$nickname=''){

    $this->no=$no;

    $this->name=$name;

    $this->nickname=$nickname;

  }

}

class LinkListDemo{

  public static function main(){

    $head=new Hero();

    $hero1=new Hero(1,"宋江","及时雨");

    $head->next=$hero1;

    $hero2=new Hero(2,"卢俊义","玉麒麟");

    $hero1->next=$hero2;

    LinkListDemo::showHeros($head);

  }

  /**

  * 展示英雄

  */

  public static function showHeros($head){

    $cur=$head;

    while($cur->next!=null){

      echo "姓名:".$cur->next->name."<br/>";

      $cur=$cur->next;

    }

  }

 

}
 

LinkListDemo::main();

 

  

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值