顺序表和链表的区别:
相同点:
1.都是线性表结构
2.元素逻辑存储上是连续的
3.每个元素都有唯一的前驱和唯一的后继(注意:首元素不存在前驱,尾元素不存在后继(循环链表除外))
不同点:
1.底层存储空间不一样,顺序表底层存储空间是连续的,而链表则是不连续的。
2.插入和删除方式不同,顺序表任意位置进行插入和删除操作,需要搬运大量的元素,效率低,时间复杂度为O(N)。
链表任意位置进行插入和删除操作,不需要搬运大量的元素,效率高,时间复杂度为O(1)。
3.随机访问不同,顺序表底层空间结构为连续的,随机访问特别方便,时间复杂度为O(1)。
链表底层空间结构为不连续的,对随机访问的操作效率低,时间复杂度为O(N)。
4.扩容:顺序表在插入元素的过程中,如果顺序表容量不足,则需要进行扩容(开辟新空间,把已有元素拷贝到新空间,释放旧空间)
链表的独特组成结构,使它在插入是不需要考虑容量是否足够,即不需要考虑扩容。
5.空间利用率:顺序表空间利用率高,是因为申请一块连续的内存。
链表空间利用率低,因为链表都是一个一个的节点组成的,节点中还有指向下一个节点的指针。而且每个节点都是malloc申请出来的空间,频繁的申请空间会导致空间碎片化,故利用率低。
6.应用场景不一样:顺序表大多运用在元素高效存储或随机访问频繁的场景。
链表大多运用在任意位置插入和删除操作频繁的场景。
7.缓存利用率:链表的缓存利用率比顺序表低(计算机的局部原理性)(了解)