前言:
在经历一段时间的学习中,我们知道了两种常见的线性数据结构——顺序表和链表。这两种数据结构对于我们了解编程有着很大的帮助。
接下来我们就来说说它们之间的区别和联系吧(◦˙▽˙◦)
在存储空间上:
链表,是逻辑上连续,物理上不一定连续。
顺序表,逻辑上连续,物理上也连续。
在随机访问(仅指用下标来随机访问)上:
链表,是不支持该功能的,其节点可以分布在内存中的任意位置,通过指针连接,不支持随机访问,访问任意节点都需要从头节点开始遍历。
顺序表,使用连续的内存空间存储元素,每个元素的存储位置与其逻辑位置相对应,支持随机访问。
在操作效率上:
链表,在操作效率上优于顺序表,只需改变指针指向,不用移动指针元素。时间复杂度为O(1)。
顺序表,在进行插入和删除操作时,特别在表中间位置时,需要移动大量元素,效率低下,时间复杂度达到O(N)。
在空间的利用率上:
链表,每个节点都需要额外的空间来存储指针,而且频繁的动态内存分配可能导致内存碎片,空间利用率相对较低。
顺序表,空间利用率较高,因为不需要额外的指针存储,除非进行¹扩容操作,否则不会产生额外的空间碎片。
在应用的场景上:
链表,更适合于需要频繁进行插入和删除操作,特别是在表的中间位置,以及空间大小不确定的场景,如实现队列和栈等数据结构。
顺序表,适合于那些需要频繁访问元素、插入和删除操作较少的场景,如缓存数据的存储。
在²缓存利用率上:
链表,低。
顺序表,高。
综上所述,我们可以得出结论,顺序表和链表各有优点,在不同的场合下选择合适的存储结构需要根据实际问题的特点和需求来决定,选择合适的存储结构会使解决问题效率成倍数地提高,这也是考验我们的一种方式。
¹扩容
分为原地扩容,异地扩容,扩容大概率会导致空间的浪费。
²缓存利用率
可去查阅计算机组成原理有关书籍。