存储逻辑关系为“一对一”特性相同元素数据有限序列。
顺序存储结构(顺序表)
不破坏数据的直接前驱和直接后继,把它们按次序存储到一片连续的内存空间中。
链式存储结构(链表)
将所有的数据分散或者连续存储在内存中,数据的直接前驱和直接后继使用指针指示。
总结
比较维度 | 顺序存储结构(顺序表) | 链式存储结构(链表) |
---|---|---|
存储方式 | 逻辑上相邻的元素在物理位置上也相邻,使用连续的存储单元 | 元素的存储单元可不连续,通过指针连接各个元素 |
内存分配 | 静态分配,需预先确定容量并分配连续空间 | 动态分配,根据需要随时为新节点分配内存 |
数据访问 | 可随机访问,通过下标直接访问元素,时间复杂度为 O(1) | 只能顺序访问,需从表头开始遍历查找,时间复杂度为 O(n) |
插入删除操作 | 插入或删除元素可能需要移动大量元素,时间复杂度为 O(n) | 只需修改相关节点的指针,一般时间复杂度为 O(1) ,但若要先定位操作位置,则时间复杂度与定位操作有关 |
空间利用率 | 可能存在空间浪费或不足的情况,取决于初始分配大小 | 按需分配空间,理论上空间利用率高,但指针会占用一定空间 |
实现难度 | 相对简单,主要操作是对数组下标的计算和元素移动 | 相对复杂,涉及指针的操作和节点的管理 |
适用场景 | 适合频繁随机访问、数据量相对固定的场景,如数组排序 | 适合频繁插入删除、数据量不确定的场景,如消息队列 |