数组和链表有何区别

描述

数组和链表的区别,这个问题,不仅面试中经常遇到,考研的同学也得掌握才行。

这两个的区别,还得从他们在内存里面的布局讲起。

数组  

数组是一块连续的内存,这块内存可以在栈空间也可以在堆空间:

数组  

一般都会有个容量限制,比如:

 

int arr[5];
就表示数组有 5 个元素,在内存中占 20 个字节。

数组  

而且为了方便使用,数组在存储数据的时候尽量保持连续。

数组  

链表在内存中不用连续,位置由系统随机分配,所以这就需要某种机制能把各个数据串联起来。

链表由一个一个结点组成,每个结点都分成数据域和指针域,指针域指向下一个结点。

这种结构也决定了链表没有容量限制,只要内存够用,就能保存更多的数据。

数组  

数组和链表的访问方式也不一样。

数组因其在内存中连续排布,访问的时候只要数组名加上数组下标就能精确定位到指定的元素。

数组  

数组名本身表示数组首元素的地址,加上下标,其实就是个偏移量,所以就访问速度而言,数组的效率确实要高。

链表因为在内存中排布不连续,所以不支持这种随机访问。要锁定某个结点,必须得借助指针,一步一步向下移动,结点越多,访问的效率越低。  

他俩的最大区别,还得是插入和删除,尤其是针对开头的插入和删除操作。

假设都往第一个位置插入元素。

如果是数组,在空间还没有满的情况下,先要把后面的元素逐个向后移动,然后把第一个位置腾出来,再把新元素放进去。 所以数组里面的元素越多,插入的效率也就越低。

链表的插入方法完全不一样,先来一个新结点,填上数据域和指针域,然后修改头节点的指向关系,不管链表中有多少个结点,插入的步骤都是这么多。

所以在插入和删除操作上,大部分情况下链表的效率要高于数组。

数组和链表在软件开发中出现的场景很高,数组简单,链表更实用。

 


审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分