顺序存储结构与链式存储结构的比较

一:顺序表的特色是逻辑上相邻的数据元素,物理存储位置也相邻,而且,顺序表的存储空间须要预先分配web

它的优势是:算法

  (1)方法简单,各类高级语言中都有数组,容易实现。数组

  (2)不用为表示节点间的逻辑关系而增长额外的存储开销。spa

  (3)顺序表具备按元素序号随机访问的特色。指针

缺点:orm

  (1)在顺序表中作插入、删除操做时,平均移动表中的一半元素,所以对n较大的顺序表效率低。内存

  (2)须要预先分配足够大的存储空间,估计过大,可能会致使顺序表后部大量闲置;预先分配太小,又会形成溢出。ci

2、在链表中逻辑上相邻的数据元素,物理存储位置不必定相邻,它使用指针(引用)实现元素之间的逻辑关系。而且,链表的存储空间是动态分配的。it

链表的最大特色是:form

  插入、删除运算方便。

缺点:

  (1)要占用额外的存储空间存储元素之间的关系,存储密度下降。存储密度是指一个节点中数据元素所占的存储单元和整个节点所占的存储单元之比。

  (2)链表不是一种随机存储结构,不能随机存取元素。


3、顺序表与链表的优缺点切好相反,那么在实践应用中怎样选取存储结构呢?一般有如下几点考虑:

  (1)顺序表的存储空间是静态分配的,在程序执行以前必须明确规定它的存储规模,也就是说事先对“MaxSize”要有合适的设定,设定过大会形成存储空间的浪费,太小形成溢出。所以,当对线性表的长度或存储规模难以估计时,不宜采用顺序表。然而,链表的动态分配则能够克服这个缺点。链表不须要预留存储空间,也不须要知道表长如何变化,只要内存空间尚有空闲,就能够再程序运行时随时地动态分配空间,不须要时还能够动态回收。所以,当线性表的长度变化较大或者难以估计其存储规模时,宜采用动态链表做为存储结构。

  但在链表中,除数据域外海须要在每一个节点上附加指针。若是节点的数据占据的空间小,则链表的结构性开销就占去了整个存储空间的大部分。当顺序表被填满时,则没有结构开销。在这种状况下,顺序表的空间效率更高。因为设置指针域额外地开销了必定的存储空间,从存储密度的角度来说,链表的存储密度小于1.所以,当线性表的长度变化不大并且事先容易肯定其大小时,为节省存储空间,则采用顺序表做为存储结构比较适宜。

  (2)基于运算的考虑(时间)

  顺序存储是一种随机存取的结构,而链表则是一种顺序存取结构,所以它们对各类操做有彻底不一样的算法和时间复杂度。例如,要查找线性表中的第i个元素,对于顺序表能够直接计算出a(i)的的地址,不用去查找,其时间复杂度为0(1).而链表必须从链表头开始,依次向后查找,平均须要0(n)的时间。因此,若是常常作的运算是按序号访问数据元素,显然顺表优于链表。

  反之,在顺序表中作插入,删除时平均移动表中一半的元素,当数据元素的信息量较大并且表比较长时,这一点是不该忽视的;在链表中做插入、删除,虽然要找插入位置,但操做是比较操做,从这个角度考虑显而后者优于前者。

  (3)基于环境的考虑(语言)

  顺序表容易实现,任何高级语言中都有数组类型;链表的操做是基于指针的。相对来说前者简单些,也用户考虑的一个因素。

  总之,两种存储结构各有长短,选择哪种由实际问题中的主要因素决定。一般“较稳定”的线性表,即主要操做是查找操做的线性表,适于选择顺序存储;而频繁作插入删除运算的(即动态性比较强)的线性表适宜选择链式存储。

相关文章
相关标签/搜索