2.10顺序与链表综合比较

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

2.10顺序与链表综合比较

顺序表和链表这两种存储表示方法各有优缺点。在实际应用中究竟选用哪一 种存储结构呢?这要根据具体的要求和性质决定.

顺序表和链表的比较

1.基于空间的考虑

顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规 模。若线性表的长度 n 变化较大,则存储规模难于预先确定。估计过大将造成空 间浪费,估计太小又将使空间溢出的机会增多。在静态链表中,初始存储池虽然 也是静态分配的,但若同时存在若干个结点类型相同的链表,则它们可以共享空 间,使各链表之间能够相互调节余缺,减少溢出机会。动态链表的存储空间是动 态分配的,只要内存空间尚有空闲,就不会产生溢出。因此,当线性表的长度变 化较大,难以估计其存储规模时,采用动态链表作为存储结构较好。

存储密度(Storage Density)是指结点数据本身所占的存储量和整个结点结构 所占的存储量之比,即:存储密度=结点数据本身所占的存储量/结点结构所占的 存储总量链表中的每个结点,除了数据域外,还要额外设置指针(或游标)域, 从存储密度来讲,这是不经济的。

一般地,存储密度越大,存储空间的利用率就高。显然,顺序表的存储密度 为 1,而链表的存储密度小于 1。例如单链表的结点的数据均为整数,指针所占 空间和整型量相同,则单链表的存储密度为 50%。因此若不考虑顺序表中的备用 结点空间,则顺序表的存储空间利用率为 100%,而单链表的存储空间利用率为 50%。由此可知,当线性表的长度变化不大,易于事先确定其大小时,为了节约 存储空间,宜采用顺序表作为存储结构。

2.基于时间的考虑

顺序表是由向量实现的,它是一种随机存取结构,对表中任一结点都可以在 O (1) 时间内直接地存取,而链表中的结点,需从头指针起顺着链找才能取得。 因此,若线性表的操作主要是进行查找,很少做插入和删除时,宜采用顺序表做 存储结构。

在链表中的任何位置上进行插入和删除,都只需要修改指针。而在顺序表中 进行插入和删除,平均要移动表中近一半的结点,尤其是当每个结点的信息量较 大时,移动结点的时间开销就相当可观。因此,对于频繁进行插入和删除的线性 表,宜采用链表做存储结构。若表的插入和删除主要发生在表的首尾两端,则宜 采用尾指针表示的单循环链表。

3.基于语言的考虑

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

值得指出的是,即使是对那些具有指针类型的语言,静态链表也有其用武之 地。特别是当线性表的长度不变,仅需改变结点之间的相对关系时,静态链表比 动态链表可能更方便。

线性表链式存储方式的比较

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值