数组和链表

一、数组

是一组固定长度,相同类型元素的序列。

二、链表

链表中的元素可以存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,只要有内存就能增加新元素。

这是用大O表示法对数组和连接的读取、插入、删除的对比

操作 数组 链表
读取 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)

 

 

 

数组的特点是访问效率高,有两种访问方式:随机访问和顺序访问。众所周知,数组的每个元素都有下标(索引)标注其位置,因此无论是怎么访问都可以通过这个下标第一时间访问到目标元素。而链表先从第一个获取第二个的地址,再访问第二个获取第三个的地址,一次类推非常耗时。

链表的优点是 插入数据快速,删除数据快。

首先说插入数据,从上图可以看到,无论是从中间插入还是从尾部插入,都执行了两个地址的写入。上一个链条写入下一个的地址,被插入的链条写入下一个的地址,没有下一个则为null。所以他始终都只进行一步操作,因此算法复杂度记为O(1)。

删除也是同样的道理,只需要上一个链条更新被删除的链条引用下一个的地址即可。

而数组向指定坐标插入数据则会覆盖当前下标原来的值(链表会后移),否则则需要重新位移(原来所有的数据往后移动)和考虑下标是否越界的问题。删除更是麻烦,没有直接的方法甚至还需要自己重新组合删除后的数据。

因此

插入多,读取少。用链表。
插入少,读取多。用数组。

当然在实际应用中还是数组用的多,因为它的访问便利性。

原文地址:https://www.cnblogs.com/zeussbook/p/11135887.html