数据结构与算法之链表------数组与链表的对比

数组与链表的定义

数组:数组是一组具有相同类型和名称的变量集合。这些变量称为数组的元素。每个数组元素都有一个编号,这个编号叫做下标。我们可以通过下标来区分这些元素。数组元素个数。数组元素的个数也称之为数组的长度。

链表:链表的特性是在中间位置增加删除元素都非常的快,不需要移动其它的元素。通常链表每个元素都有保存指向下一个元素的指针。还要保存上一个元素的指针。循环链表则把最后一个元素的指针指向第一个元素。

区别

从逻辑结构上看

数组必须事先定义一个固定大小的长度(元素个数),不能适应动态的增减情况。当数据增加时,可能会超出原先定义的个数,出现内存溢出。当数据减少时,又会造成内存浪费。数组中的插入和删除,需要移动其它数据项。

链表则能动态进行存储分配。对于程序员方便快捷。可以动态的增加或删减。可以方便的插入或删除数据项而不移动其它的数据项

从内存存储来看

(静态)数组从栈中分配空间,对于程序员方便快捷自由度小。

而链表是从堆中分配空间,自由度大但是申请管理比较麻烦。

总结

引入链表克服了数组的局限性,它允许动态的分配所需数量的内存。同时信息的插入和删除操作对于数组的影响是局部的,从而使这些操作更容易实现了。在数组的前面插入一个新的元素,数组中的所有元素都需要移动,为新元素腾出空间。因此插入操作对于数组的影响数全局的,删除也是如此。

但是数组还是有些超过链表的优势,即数组允许随机访问,如果需要直接访问元素,那么数组是一个更好的选择。对于二叉查找和大部分的排序算法。这都是更好的选择。但如果经常访问的只是某几个元素,而且算法的核心不断改变结构,那么使用链表是一个更好的选择。

使用数组的另一个优点是节约空间。在数组中用于存储某项的单元只要和该项的大小一样即可。但在链表中,每个节点还需要至少包含一个引用域。对于一个大链表,需要相当数量的内存来存储引用。

转载于:https://my.oschina.net/mrminlingchao/blog/317850

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值