顺序表与链表的综合比较

      1.基于空间的考虑

      顺序表的存储空间是静态分配的,在程序执行之前必须声明它的规模。若线性表的长度变化较大,则存储规模难以预先确定,过大会造成空间浪费,过小可能会导致溢出。动态链表的存储空间是动态分配的,只要内存有空闲,就不会导致溢出。因此,当线性表的长度变化较大,难以估计其存储规模时,采用动态链表作为存储结构比较好。
      存储密度是指结点数据本身所占的存储量和整个结点结构所占的存储量之比。一般来说,存储密度越大,存储空间的利用率就越高。显然顺序表的存储密度为1,而链表的存储密度小于1。例如,单链表中各结点的数据均为整数,指针所占空间和整型量相同,则单链表的存储密度为0.5。因此若不考虑顺序表中的备用结点空间,则顺序表的空间利用率是1。单链表的空间利用率是0.5。因此,当线性表的长度变化不大,易于事先确定其大小时,为了节约存储空间,采用顺序表作为存储结构比较好。

      2.基于时间的考虑

      顺序表是一种随机存储结构,对表中任一结点都可以在O(1)时间内直接存取,而链表中的结点则需要从头指针开始顺序遍历才能取得。因此,若线性表的操作主要是进行查找,很少做插入或删除时,采用顺序表为宜。
      在链表的任意位置上进行插入删除,都只需要修改指针。而在顺序表中,平均要移动一半的结点【(0+1+2+3+…+n)/(n+1)=n/2】。因此,对于频繁进行插入删除操作的线性表,采用链表为宜。若表的插入删除操作主要发生在表的首尾两端,则采用带尾指针的单循环链表。

      3.基于语言的考虑

      在没有提供指针类型的高级语言环境中,若要采用链表结构,则可以使用游标来实现静态链表。虽然静态链表在存储分配上有不足之处,但它和动态链表一样,具有插入删除方便的特点。

      线性表链式存储方式的比较顺序表与链表的综合比较