顺序表和链表是数据结构中的两种存储形式。
顺序表(值得是典型的数组):
原理:顺序表存储是将数据放到一块物理地址连续的存储空间中,级相邻的元素物理地址也是连续的。
顺序表的插入如删除操作:
- 插入:
最好情况:在表尾插入元素,无需移动元素,时间复杂度为O(1)。
最坏情况:在表头插入元素,所有元素将都会进行后移,需要进行移动n次,时间复杂度为O(n)。
- 删除:
最好情况:删除尾元素,无需移动元素,时间复杂度为O(1)。
最坏情况:删除头部元素,需要向前移动第一个元素除外的所有元素,时间复杂度为O(n)。
顺序表的优点:
- 空间利用率高。
- 读取速度快可以根据下标去读取。
顺序表的缺点:
- 插入和删除比较慢。上面介绍删除时也可以看出删除和插入元素后此元素后面的元素都要动。
- 不可以增加长度,有空间限制。
适用场景:
- 适用于表长度变化不大场景。
- 多查找,少插入删除。
链表:
原理:链表存储是在程序运行过程中动态分配空间,只要存储器有空间,就不会发生存储溢出问题,相邻元素不要求在物理地址上相邻,在逻辑上相邻即可。所存储的空间分为两部分,一部分用来存储节点值,另一部分用来存储节点间关系的指针。
链表的优点:
- 插入和删除的速度快,保留原来的物理地址。
- 没有空间限制,只与内存空间的大小有关。
链表的缺点:
- 需要占取额外的空间去存储指针,浪费空间。
- 查找速度慢,每次都需要从开始节点开始查找。
适用场景:
- 适用于频繁的插入删除操作。
- 适用于线性长度变化大。