数组
- 要存储多个元素,数组(或称为列表)可能是最常用的数据结构
- 但是数组也有很多缺点:
- 数组的创建通常需要申请一段连续的内存空间(一整块的内存),并且大小是固定的(大多数编程语言数组都是固定的),所以当当前数组不能满足容量需求时,需要扩容。(一般情况下是申请一个更大的数组,比如2倍.然后将原数组中的元素复制过去)
- 而且在数组开头或中间位置插入数据的成本很高,需要进行大量元素的位移。
- 尽管我们已经学过的js的array类方法可以帮为我们做这些事情,但背后的原理依然是这样。
要存储多个元素,另外一个选择就是链表
- 但不同于数组,链表中的元素在内存中不必是连续的空间。
- 链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有些语言称为这很或者连接)组成.
链表
相对于数组,链表有一些优点:
- 内存空间不是必须连续的。可以充分利用计算机的内存。实现灵活的内存动态管理
- 链表不必在创建时就确定大小,并且大小可以无限延申下去
- 链表在插入和删除数据时,时间复杂度可以达到O(1),相对数组效率高很多
相对于数组,链表有一些缺点:
- 链表访问任何一个位置的元素时,都需要从头开始访问。(无法跳过第一个元素访问任何一个元素)
- 无法通过下标直接访问元素,需要从头一个个访问,直接找到对应的元素.
什么是链表呢?
链表类似于火车: 有一个火车头,火车头会连接一个节点,节点上面有乘客(类似于数据),并且这个节点会连接下一个节点,依次类推