顺序表和链表的比较

2.6 顺序表和链表的比较

像我们之前所接触的对于顺序表和链表而言,在实际应用中,不能笼统地说哪种存储结构更好,由于它们各有优缺点,选用哪种存储结构,则应根据具体问题具体分析,通常从空间性能和时间性能两个方面做比较。
2.6.1空间性能的比较
(1)、存储空间的分配
顺序表的存储空间需要预先分配,元素个数扩充受一定限制,容易造成存储空间浪费或者空间溢出的现象;而链表不需要预先为其分配空间,只要内存空间允许,链表中的元素个数就没有限制。基于此,当线性表的长度变化较大,难以预估存储规模的时候,最好采用链表作为存储结构。
(2)、存储密度的大小
链表的每个结点除了设置数据域用来存储数据元素外,还需要额外设置指针域,用来存储指示元素之间逻辑关系的指针,从存储密度上讲,这是不经济的。所谓存储密度是指数据元素本身所占用的存储量和整个结点结构所占用的存储量之比,即
存储密度=数据元素本身所占用的存储量/结点结构所占用的存储量。
存储密度越大存储空间的利用率越高。显然,顺序表的存储密度为1,而链表的存储密度小于1。如果每个元素数据域占用的空间小。例如若单链表的结点数据均为整数,指针所占用的空间和整型量相同,则单链表的存储密度为0.5。因此,如果不考虑顺序表中的空闲区,则顺序表的存储空间的利用率为%100,而单链表的存储空间利用率仅为%50。基于此,当线性表的长度变化不大,易于事先确定其大小时,为了节约存储空间,益采用顺序表作为存储结构。
2.6.2时间性能上的比较
(1)、存取元素的效率
顺序表是由数组实现的,它是一种随机存取的结构,指定任意一个位置序号i,都可以在O(1)时间内直接存取该位置的元素,即取值操作的效率高;而链表是一种顺序存储结构,按位置访问链表第i个元素的时候,只能从表头开始依次向后遍历链表,直到找到第i个位置上的元素,时间复杂度为O(n),即取值操作的效率低。
基于此,若线性表的主要操作是和元素位置紧密相关的这类取值操作,很少做插入和删除时,益采用顺序表作为存储结构。
(2)、插入和删除操作的效率
对于链表,在确定插入和删除的位置后,插入或删除操作无需移动数据,只需要修改指针,时间复杂度为O(1)。然而对于顺序表,进行插入或删除时,平均需要移动表中近一半的结点,时间复杂度为O(n)。尤其是当某个结点的信息量较大时,移动结点的时间开销就相当客观。
基于此,对于频繁进行插入或删除操作的线性表,益采用链表作为存储结构。
总结:当线性表的长度变化不大时,易于事先确定其大小时,为了节约存储空间,益采用顺序表作为存储结构。
而对于频繁进行插入或删除操作的线性表,益采用链式存储结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值