PHP链表

来源:互联网 发布:php中级面试题 编辑:程序博客网 时间:2024/06/07 09:56

                                         PHP链表


 

作用是随机存储,查找必须顺序引导查找,优点是增加新节点和删除节点方便,缺点是不能直接读取数据

 

要点:链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元(避免内存的浪费)

 

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

 

数组和链表的区别

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

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

 

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

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

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

 

一、单链表

链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表

单向链表,双向链表,环形链表

PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区)

规定:基本数据类型,一般放在栈区

复合数据类型,比如对象,放在堆区


定义一个类Hero

定义成员属性排名 $no

定义成员属性姓名 $name

定义成员属性昵称 $nickname

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

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


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

获取$head对象,new Hero()

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

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

获取第二个Hero对象$hero2new 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 0
原创粉丝点击