数据结构——2、链表

1.1.1 *链表*

1.1.1.1 *内存中的链表结构*

链表是一种在物理上非连续、非顺序的数据结构,由若干node节点组成

链表包括单向链表和双向链表

单向链表包括两部分:存放数据的变量data;指向下一个节点的指针next

链表的第一个节点被称为头结点,最后一个节点被会成为尾节点,尾节点的next指针指向空,结构如下:

imgimg

双向链表包括三部分:存放数据的data;指向下一个节点的指针next;指向前置节点的指针prev;

img

数组在内部中是顺序存储,链表在内存中是随机存储,存储如下:

imgimg

1.1.1.2 *操作节点*

1.1.1.2.1 *查找节点*

链表查找节点,只能从第一个节点开始,一个个向后查找,时间复杂度为O(n)

1.1.1.2.2 *更新节点*

链表的更新像数组一样简单,只需要将旧数据替换成新数据即可

1.1.1.2.3 *插入节点*

链表中元素的插入,不需要像数组一样,还考虑扩容问题,只要内存中还有空间,可以一直插入元素

1、尾部插入:将最后一个节点的next指针指向新插入的节点即可

2、头部插入包括两步:

将新节点的next指针,指向原先的头节点;

将新节点变为链表的头节点

img

3、中间插入:包括两步:

把插入位置的原前置节点的next指针,指向新节点;

把新节点的next指针,指向原前置节点next指针指向的节点

1.1.1.2.4 *删除节点*

1、 尾部删除:将倒数第2个节点的next指针,指向空

2、 头部删除:将链表的头节点,设置为原头节点next指针指向的节点

3、 中间删除:将删除位置的前置节点的next指针,指向删除位置的下一个节点

java有自动回收机制,没有被引用的节点,会自动被回收

1.1.1.3 *代码实现*

imgimgimg

1.1.1.4 *数组和链表比较*

数组和链表的时间复杂度比较如下:

img

数组适用于读,链表适用于写

posted on 2021-09-27 10:13  夜萤火虫和你  阅读(185)  评论(0编辑  收藏  举报

导航