数组和链表的区别,这个问题,不仅面试中经常遇到,考研的同学也得掌握才行。
这两个的区别,还得从他们在内存里面的布局讲起。
数组是一块连续的内存,这块内存可以在栈空间也可以在堆空间:
一般都会有个容量限制,比如:
int arr[5];就表示数组有 5 个元素,在内存中占 20 个字节。
而且为了方便使用,数组在存储数据的时候尽量保持连续。
链表在内存中不用连续,位置由系统随机分配,所以这就需要某种机制能把各个数据串联起来。
链表由一个一个结点组成,每个结点都分成数据域和指针域,指针域指向下一个结点。
这种结构也决定了链表没有容量限制,只要内存够用,就能保存更多的数据。
数组和链表的访问方式也不一样。
数组因其在内存中连续排布,访问的时候只要数组名加上数组下标就能精确定位到指定的元素。
数组名本身表示数组首元素的地址,加上下标,其实就是个偏移量,所以就访问速度而言,数组的效率确实要高。
链表因为在内存中排布不连续,所以不支持这种随机访问。要锁定某个结点,必须得借助指针,一步一步向下移动,结点越多,访问的效率越低。
他俩的最大区别,还得是插入和删除,尤其是针对开头的插入和删除操作。
假设都往第一个位置插入元素。
如果是数组,在空间还没有满的情况下,先要把后面的元素逐个向后移动,然后把第一个位置腾出来,再把新元素放进去。 所以数组里面的元素越多,插入的效率也就越低。
链表的插入方法完全不一样,先来一个新结点,填上数据域和指针域,然后修改头节点的指向关系,不管链表中有多少个结点,插入的步骤都是这么多。
所以在插入和删除操作上,大部分情况下链表的效率要高于数组。
数组和链表在软件开发中出现的场景很高,数组简单,链表更实用。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
数组
+关注
关注
1文章
417浏览量
25943 -
链表
+关注
关注
0文章
80浏览量
10558
原文标题:数组和链表的区别
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言-链表(单向链表、双向链表)
在前面章节已经学习了数组的使用,数组的空间是连续空间,数组的大小恒定的,在很多动态数据存储的应用场景下,使用不方便;而这篇文章介绍的链表结构,支持动态增加节点,释放节点,比较适合存储动
unpacked数组和packed数组的主要区别
unpacked数组和packed数组的主要区别是unpacked数组在物理存储时不能保证连续,而packed数组则能保证在物理上连续存储。
评论