数据结构之链表

链表(linkedlist)

  • 定义

    链表是一系列的存储数据元素的单元通过指针串接起来形成的,因此,链表中的每个单元至少有两个域:数据域指针域。根据指针的指向,链表能形成不同的结构:单向链表,双向链表,循环链表

 

  • 单向链表

    单向链表拥有一个数据域一个指针域;数据域用于存储数据元素,且都是通过一个 Object 类的对象引用来指向数据元素的;而指针域用于指向下一个具有相同结构的节点。

                    

 

 

      如图,链表的第一个节点和最后一个节点,分别称为链表的头节点尾节点。尾节点的特征是其 next 引用为空(null);如果节点 a1 的 next 引用指向节点 a2,则 a1 就是 a2 的直接前驱,a2 是 a1 的直接后续只能通过前驱节点找到后续节点而无法从后续节点找到前驱节点

 

              

 

 

  • 双向链表

    相对于单向链表,双向链表新增加一个域,该域用于指向节点的直接前驱节点,使得通过一个节点的引用,不但能够访问其后续节点,也可以方便的访问其前驱节点;单向链表只能从一个方向遍历,双向链表可以从两个方向遍历。

 

                               

 

                            

 

      在使用双向链表实现链接表时,为使编程更加简洁,我们使用带两个哑元节点的双向链表来实现链接表。其中一个是头节点,另一个是尾节点,它们都不存放数据元素,头节点的pre 为空,而尾节点的 Next 为空。

                

 

 

 

  • 循环链表

    头节点和尾节点被连接在一起的链表称为循环链表,这种方式在单向和双向链表中皆可实现。循环链表中第一个节点之前就是最后一个节点,反之亦然。

                             

 

                

 

 

  • 链表的优缺点

    优点:链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素; 添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快; 

     缺点:因为含有大量的指针域,占用空间较大; 查找元素需要遍历链表来查找,非常耗时。

     适用场景:数据量较小,需要频繁增加,删除操作的场景

       

     

 

 

 

 

 

 

posted @ 2020-05-19 23:28  发育中的程序猿  阅读(238)  评论(0编辑  收藏  举报