2.10顺序与链表综合比较
顺序表和链表这两种存储表示方法各有优缺点。在实际应用中究竟选用哪一 种存储结构呢?这要根据具体的要求和性质决定.
顺序表和链表的比较
1.基于空间的考虑
顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规 模。若线性表的长度 n 变化较大,则存储规模难于预先确定。估计过大将造成空 间浪费,估计太小又将使空间溢出的机会增多。在静态链表中,初始存储池虽然 也是静态分配的,但若同时存在若干个结点类型相同的链表,则它们可以共享空 间,使各链表之间能够相互调节余缺,减少溢出机会。动态链表的存储空间是动 态分配的,只要内存空间尚有空闲,就不会产生溢出。因此,当线性表的长度变 化较大,难以估计其存储规模时,采用动态链表作为存储结构较好。
存储密度(Storage Density)是指结点数据本身所占的存储量和整个结点结构 所占的存储量之比,即:存储密度=结点数据本身所占的存储量/结点结构所占的 存储总量链表中的每个结点,除了数据域外,还要额外设置指针(或游标)域, 从存储密度来讲,这是不经济的。
一般地,存储密度越大,存储空间的利用率就高。显然,顺序表的存储密度 为 1,而链表的存储密度小于 1。例如单链表的结点的数据均为整数,指针所占 空间和整型量相同,则单链表的存储密度为 50%。因此若不考虑顺序表中的备用 结点空间,则顺序表的存储空间利用率为 100%,而单链表的存储空间利用率为 50%。由此可知,当线性表的长度变化不大,易于事先确定其大小时,为了节约 存储空间,宜采用顺序表作为存储结构。
2.基于时间的考虑
顺序表是由向量实现的,它是一种随机存取结构,对表中任一结点都可以在 O (1) 时间内直接地存取,而链表中的结点,需从头指针起顺着链找才能取得。 因此,若线性表的操作主要是进行查找,很少做插入和删除时,宜采用顺序表做 存储结构。
在链表中的任何位置上进行插入和删除,都只需要修改指针。而在顺序表中 进行插入和删除,平均要移动表中近一半的结点,尤其是当每个结点的信息量较 大时,移动结点的时间开销就相当可观。因此,对于频繁进行插入和删除的线性 表,宜采用链表做存储结构。若表的插入和删除主要发生在表的首尾两端,则宜 采用尾指针表示的单循环链表。
3.基于语言的考虑
在没有提供指针类型的高级语言环镜中,若要采用链表结构,则可以使用光 标实现的静态链表。虽然静态链表在存储分配上有不足之处,但它是和动态链表 一样,具有插入和删除方便的特点。
值得指出的是,即使是对那些具有指针类型的语言,静态链表也有其用武之 地。特别是当线性表的长度不变,仅需改变结点之间的相对关系时,静态链表比 动态链表可能更方便。
线性表链式存储方式的比较

本文详细对比了顺序表和链表两种线性表存储结构的优缺点,包括空间利用、时间效率及编程语言适用性。顺序表适合长度固定、操作以查找为主的场景;链表则适用于长度不确定、频繁插入删除的情况。
2066

被折叠的 条评论
为什么被折叠?



