顺序表和链表的比较

顺序表和链表的比较,存取方式,顺序表可以顺序存储,也可以随机存取,链表只可以从表头顺序存取元素。
逻辑结构和物理结构,采用顺序存储时,逻辑上相邻的的元素,其对应的物理存储位置也相邻,而采用链式存储的时候,逻辑上相邻的元素,其物理存储位置不一定相邻,其对应的逻辑关系是通过指针链接来表示的。
查找和删除的操作,对于按值查找,当顺序表支持随机访问,时间复杂度为o1,而链表的平均时间复杂度为on。顺序表的插入和删除操作,平均需要移动半个表长的元素。链表的插入,删除操作,只需要修改相关的结点的指针域即可。由于链表每个结点带有指针域,因而在存储空间上比顺序存储要付出更大的代价,存储的密度不够大。
空间分配,顺序存储在静态存储分配的情形下,一旦存储空间装满就不能扩充,如果再加入新元素将出现内存溢出,需要预先分配足够大的存储空间。预先分配过大,可能会导致顺序包后部大量闲置,预先分配过少,又会造成溢出。动态存储分配虽然存储空间可以扩充,但需要移动大量元素,导致操作效率降低,而且若内存中没有大块的连续存储空间将导致分配失败,链式存储的结空间只在需要的时候时候申请分配,只要内存又空间就可以分配,操作灵活,高效。
在实际中应该怎样选取存储结构呢。
1.基于存储的考虑。对线性表的长度或者存储规模难以估计,不宜采用顺序表,链表不事先预估存储规模,但是链表的存储密度较低,显然链式存储的结构密度是小于1。
2,基于运算的考虑,在顺序表中按序号访问a1的时间复杂度为o1,而链表中按照序号访问的时间复杂度为on。所以如果经常做的运算是按序号访问数据元素,显然顺序表优于链表。
在顺序表中做插入删除操作的时候,平均移动表中一半的元素,当数据元素的信息量较大且表较长的时候。这一点不应该忽略,在链表中做插入,删除操作时,虽然也要找插入位置,但操作主要是比较操作,从这个角度考虑显然后者优先于前者。
3.基于环境的考虑,顺序表容易实现,任何高级语言中都有数组类型,链表的操作是基于指针的,相对来讲,前者实现较为简单,这也是用户考虑的一个因素。总之,两种存储结构各有长短,选择哪一种由实际问题所决定的,通常较稳定的线性表选择顺序存储,而频繁做插入,删除的操作的线性表选择链式存储。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值