顺序表和链表优缺点
顺序表:
他是在计算机内存中以数组形式保存的线性表。使用一组地址连续的存储单元依次存储数据元素的线性结构。
单链表:
是一种链式存储的结构。用一组地址任意的存储单元存放线性表中的数据元素。(存储地址空间不需要是连续的)
优缺点:
- 空间的开辟
顺序表是需要开辟连续的空间,当需要的空间不够,而有需要插入的时候,就需要再重新开辟空间,将原先的内容拷贝到新的空间,这就开销比较大了。(而且当遇到非内壁类型的数据时,还要考虑深浅拷贝的问题)。而单链表则是每次只需要开辟一个节点,需要的时候再开辟。 - 空间的使用
但是我们要知道,如果我们已经清楚地知道需要用多少空间来存储数据了,那么我们是选择使用顺序表来进行存储的。因为单链表的话,因为每个节点都会有一个非数据项的指针,造成空间的浪费。并且每次都要开一个节点,每次开辟的地址都是随机的,可能会早成空间碎片。(这个问题在空间配置器后,会得到很好的解决,空间配置器也就是为了解决内存碎片的问题的)
顺序表是可以直接先把空间开辟好的。不用进程开辟空间。所以这个时候,顺序表比较好了。 - CPU高速缓存
顺序表的空间一般都是连续开辟的,而且一次会开辟多个存储元素的空间,所以在使用顺序表的时候,可以一次把多个数据写入高速缓存区,再写入主存,顺序表的CPU告诉缓存效率是比较高的。
而碎玉单链表来说,因为是存储一个数据才会开辟一个空间。所以数据存储时都要单独的写入高速缓存区,再写入主存,这就造成了,单链表的CPU高速缓存速率较低。
那么,这样看来,是不觉得单链表就很垃圾了呢? - 时间上的比较
- 访问随机元素的时间复杂度:因为顺序表是像数组一样的。用下标来访问元素。支持随机访问。但是链表就不可以了,要找到某个元素,必须遍历单链表。所以单链表的时间复杂度是O(N) 顺序表是O(1)
- 随机插入删除元素:对于顺序表来说,插入是很费力的了,因为,只要插入,就意味着要挪动元素。开销大。但是对于单链表来说就很方便了,只要有这个位置,直接指针连上就好了。所以对于顺序表来说,插入就是O(N),而对于链表来说:O(1)
- 而对于线性表来说我们使用插入删除的操作要多一些,所以,用单链表相对要好。
通过以上比较,我们可以知道,对于顺序表和单链表来说,各自各自的优缺点。按照我们的需要来进行选择。