数组与链表
链表
1,链表是什么:
链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素;
链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列,通过改变数组大小实现。而链表不是用顺序实现的,用指针实现,在内存中不连续。意思就是说,链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题。
所以,链表允许插入和删除表上任意位置上的节点,但是不允许随即存取。链表有很多种不同的类型:单向链表、双向链表及循环链表。
2,单项链表
单项链表包含两个域,一个是信息域,一个是指针域。也就是包含两部分,一部分存储或者显示节点的信息,一部分保存下一个节点的地址,最后一个保存的是空值。
3,双向链表
双向链表即每个节点保存了两个方向的信息,一个指向前一个节点,一个指向后一个节点。
4,循环链表
即最后的节点指针域保存的是第一个节点的位置信息,反之亦然。
单向链表 | 双向链表 | |
---|---|---|
针 | 每个元素只有一个指针只会下一个元素的地址 | 每个元素有两个指针只会上一个和下一个元素的地址 |
查询 | 较慢 | 较快,可以通过二分查找来提速 |
增删 | 较快 | 更快 |
存储效率 | 略高,除了存储元素,只会存储一个指针 | 较低,除了存储元素,需要存储两个指针 |
双向链表的增、删、查均优于单向链表,但是目前市面上用的较多的仍为单向链表,主要是双向链表的多一个指针,在存储效率上低于单向链表。一个指针在32位系统需要4个字节来存储,在64位系统需要8个字节来存储。
由此可知,链表存储结构在内存中是非连续的,非顺序的,元素顺序主要靠链表中的指针来实现。
数组
- 数组是相同数据类型的元素按一定顺序排列的集合。所以数组在内存中连续,链表不连续。声明一个数组的时候就在内存中划出一片连续的区域。
- 数组中的所有元素必须是同类型的,或者是相关类型的衍生类型,所以数组又称为同质类型结构。
- 数组元素可以直接访问,数组下标从0开始。
- 数组是从抽象父类Array派生出来的引用类型。
区别
数组跟链表的区别
常用的数据结构时间复杂度: