0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数组和链表有何区别

学益得智能硬件 来源:学益得智能硬件 2024-02-19 15:33 次阅读

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

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

5554628c-cef8-11ee-a297-92fbcf53809c.png  

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

5571febe-cef8-11ee-a297-92fbcf53809c.png  

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

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

55881708-cef8-11ee-a297-92fbcf53809c.png  

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

55a7c13e-cef8-11ee-a297-92fbcf53809c.png  

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

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

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

55bd89ec-cef8-11ee-a297-92fbcf53809c.png  

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

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

55d9e4c0-cef8-11ee-a297-92fbcf53809c.png  

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

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

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

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

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

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

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

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


审核编辑:刘清

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

    关注

    1

    文章

    417

    浏览量

    25943
  • 链表
    +关注

    关注

    0

    文章

    80

    浏览量

    10558

原文标题:数组和链表的区别

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言-链表(单向链表、双向链表)

    在前面章节已经学习了数组的使用,数组的空间是连续空间,数组的大小恒定的,在很多动态数据存储的应用场景下,使用不方便;而这篇文章介绍的链表结构,支持动态增加节点,释放节点,比较适合存储动
    的头像 发表于 09-09 11:30 1670次阅读

    指针数组数组指针及其函数指针区别

    进程的五种状态模型分别是哪些呢?指针数组数组指针及其函数指针区别呢?
    发表于 12-24 07:28

    在RT-Thread中普通链表和侵入式链表区别

    ,这个成员变量是一个通用的链表结点。二者区别普通的链表和侵入式链表区别在于普通的链表结点的指针
    发表于 04-11 15:15

    DVR和NVR区别 谁将最终占领市场?

    DVR和NVR区别 谁将最终占领市场?
    发表于 12-27 22:19 0次下载

    指针和数组都是C语言的精髓所在 两者联系区别

    指针和数组都是C语言的精髓所在,对于很多C程序员来说,如果你问这样一个问题:数组和指针什么区别?他们的答案很可能是:”数组和指针不是同一样
    的头像 发表于 05-27 14:51 4151次阅读
    指针和<b class='flag-5'>数组</b>都是C语言的精髓所在 两者<b class='flag-5'>有</b><b class='flag-5'>何</b>联系<b class='flag-5'>区别</b>

    C语言指针和数组区别

    在C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针和数组到底什么区别??
    的头像 发表于 07-18 16:29 1930次阅读

    C语言_链表总结

    本篇文章介绍C语言链表相关知识点,涉及链表的创建、单向链表、循环链表、双向链表、单向循环链表
    的头像 发表于 08-14 09:53 1788次阅读

    什么是柔性数组?柔性数组优点

    C99中,结构体中的最后一个元素允许是未知大小的数组,这就叫作 柔性数组
    的头像 发表于 09-14 10:34 1273次阅读

    unpacked数组和packed数组的主要区别

    unpacked数组和packed数组的主要区别是unpacked数组在物理存储时不能保证连续,而packed数组则能保证在物理上连续存储。
    的头像 发表于 10-18 09:13 2836次阅读

    ZigBee 与 Z-Wave:区别

    ZigBee 与 Z-Wave:区别
    的头像 发表于 01-03 09:45 1877次阅读
    ZigBee 与 Z-Wave:<b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?

    接地基础知识:PE 和 FG 区别

    接地基础知识:PE 和 FG 区别
    的头像 发表于 03-10 15:07 1.4w次阅读
    接地基础知识:PE 和 FG <b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?

    链表和双链表区别在哪里

    链表和双链表区别链表的每一个节点中只有指向下一个结点的指针,不能进行回溯。 双链表的每一个节点给中既有指向下一个结点的指针,也有指向
    的头像 发表于 07-27 11:20 1657次阅读
    单<b class='flag-5'>链表</b>和双<b class='flag-5'>链表</b>的<b class='flag-5'>区别</b>在哪里

    异构集成 (HI) 与系统级芯片 (SoC) 区别

    异构集成 (HI) 与系统级芯片 (SoC) 区别
    的头像 发表于 11-29 15:39 2273次阅读
    异构集成 (HI) 与系统级芯片 (SoC) <b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?

    光耦与光继电器区别

    光耦与光继电器区别
    的头像 发表于 12-13 13:59 898次阅读
    光耦与光继电器<b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?

    数组链表在内存中的区别 数组链表的优缺点

    数组链表在内存中的区别 数组链表的优缺点  数组链表
    的头像 发表于 02-21 11:30 1034次阅读