数据结构之单链表详解

😽博主优快云主页:小源_😽

🖋️个人专栏:《数据结构》🖋️

😀努力追逐大佬们的步伐~


目录

1.前言

2. 链表

2.1 链表的概念及结构

2.2 链表的结构分类

3. 无头单向非循环链表的模拟实现

3.1 定义IList接口

3.2 重写IList中的方法

3.3 display(打印方法)

3.4 size方法

3.5 contains方法

3.6 addFirst头插法

3.7 addLast尾插法

3.8 addIndex任意插法

3.9 remove方法

3.10 removeAllKey方法

3.11 clear方法

4.小结


1.前言

我们都知道,ArrayList的底层是一段连续的空间,在ArrayList任意位置插入或者删除元素时,就需要将后续元素整体往前或往后搬移,时间复杂度为O(n),效率比较低,并且在插入元素遇到扩容时,有可能会浪费空间,所以ArrayList不适合做任意位置插入和删除比较多的场景。因此,java集合中又引入了LinkedList,即链表结构。

本章重点:

本文着重讲解了链表的结构和无头单向非循环链表的实现。


2. 链表

2.1 链表的概念及结构

链表是一种物理结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。我们举个小火车例子就可以轻松理解这句话:

链表类似火车一样,它是由一个一个节点/结点(车厢)组成的。我们可以把头节点比作火车头,把后面的节点比作火车的车厢,把利用每个节点中存放的下一个节点的地址来连接每一个节点比作火车之间的铁钩。

链表的每个节点都分为两个部分,一个是val/dadta域(用来存放值),另一个是next域(用来存放下一个节点的地址)。最后一个节点的next域为null。

注意:
  1.从上图可以看出,链式结构在物理上不一定是连续的,但是 逻辑上是连续的。
  2.现实中的节点一般都是从堆上申请出来的。
  3.从堆上申请的空间,是按照一定的策略来分配到,两次申请的空间可能连续,也可能不连续。

2.2 链表的结构分类

实际中链表的结构非常多样,以下情况组合起来就有 8 种链表结构:

1.单向后者双向

2.带头后者不带头 

3. 循环或者非循环

虽然有这么多的链表结构,但是我们重点掌握这两种: 

1.无头单向非循环链表结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多

2.无头双向链表: 结构复杂,一般用来单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然复杂,但是在后面模拟实现的时候就能发现它有很多特点,反而变简单了


3. 无头单向非循环链表的模拟实现

3.1 定义IList接口

public interface IList {
    //头插法
    void addFirst(int data); 
    //尾插法
    void addLast(int data);
    //任意位置插入,第一个数据节点为0号下标
    void addIndex(int index,int data);
    //查找是否包含关键字key是否在单链表当中
    boolean contains
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值