顺序表和链表优缺点

顺序表:

他是在计算机内存中以数组形式保存的线性表。使用一组地址连续的存储单元依次存储数据元素的线性结构。

单链表:

是一种链式存储的结构。用一组地址任意的存储单元存放线性表中的数据元素。(存储地址空间不需要是连续的)

优缺点:

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

通过以上比较,我们可以知道,对于顺序表和单链表来说,各自各自的优缺点。按照我们的需要来进行选择。

posted @ 2018-04-03 12:23  chan0311  阅读(1486)  评论(0编辑  收藏  举报