图文解释:
文字解释:
从4个方面比较:所占空间,运行时间效率,具体相关操作(增 删 查 改),和适用情况
其中,运行时间的比较放在了 具体相关操作 里面去解读
补充:存储密度 = 结点数据本身占用的空间 / 结点占用的空间总量
存储密度越大,存储空间的利用率越高
1.所占空间:
顺序表
(1)优点:内存空间仅需要存放数据,存储密度大(为1),每个结点所占空间小
(2)缺点:顺序存储需要数组来完成,申请的为静态内存空间,预先分配,空间固定,空间可能出现不够用或者浪费的情况
链表
(1)优点:结点空间可以动态申请和释放,灵活多变,整体空间利用率高,不会出现浪费空间以及空间不够用的现象
(2)缺点:存储密度小(小于1),每个结点所占空间大
2.具体相关操作的对比 -----------增加(插入) 和 删除操作
顺序表
(1)优点:无
(2)缺点:
需要移动数据元素,依次将 增加和删除的后面的元素进行移位
时间复杂度为 O(n)
链表
(1)优点:
无需移动数据元素,直接通过数据的指针域进行操作,实现增加和删除
时间复杂度为 O(1)
(2)缺点:无
3.具体相关操作的对比 -----------查找 和 改变操作
顺序表
(1)优点:
随机存取元素。可通过数组下标,直接找到某个数组,完成对数据的查找和改变。
时间复杂度为 O(1)
(2)缺点:无
链表
(1)优点:无
(2)缺点:
顺序存取元素,需要从首元结点,依次向后查找,直到找到所要找的数据
时间复杂度为 O(n)
4.适用情况
顺序表:
空间上: 表长变化不大
操作上: 经常进行 查找 和 改变 操作的
很少进行 增加(插入)和删除操作的
链表:
空间上: 表长变化大的
操作上: 经常进行 增加 和 删除 操作的
很少进行 查找 和 改变 操作的(影响较小)
5.总结:
无论顺序表还是链表,没有哪一种是更好的,只有在合适的情况下,选择合适的存储结构,才是正确的