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

    文章

    409

    浏览量

    25595
  • 链表
    +关注

    关注

    0

    文章

    80

    浏览量

    10464

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    伺服电机和步进电机的过载特性区别

    倍速链输送具有哪些优点?伺服电机和步进电机的控制方式区别?伺服电机和步进电机的过载特性区别
    发表于 10-11 06:31

    伺服电机和步进电机区别

    伺服电机和步进电机区别
    发表于 10-12 08:50

    字符数组和字符指针区别

    之前学习C语言的时候也有单独研究记录过字符数组和字符指针,嵌入式开发,发现在实际开发中有时完全忘记了这两者的区别,今日特地再来一番总结。笔记1当用一个char...
    发表于 12-15 06:27

    进程管理的同步与互斥区别以及联系

    进程管理的同步与互斥区别?进程管理的同步与互斥联系?
    发表于 12-23 06:15

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

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

    指针数组数组指针什么区别和联系呢

    什么是指针数组数组指针?指针数组数组指针到底是什么?指针数组数组指针
    发表于 12-24 06:55

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

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

    详谈数组和指针的区别与联系

    详谈数组和指针的区别与联系
    的头像 发表于 06-29 15:18 2.2w次阅读
    详谈<b class='flag-5'>数组</b>和指针的<b class='flag-5'>区别</b>与联系

    C语言指针和数组区别

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

    C语言_链表总结

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

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

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

    链表的基础知识

    ,也就是数组数组的每个元素之间的地址是连续的;对于链式存储来说,也就是平常所说的链表链表每个元素之间的地址并不是连续的,而是分散的,他们之间的联系通过结点的 next 指针来建立。
    的头像 发表于 01-20 17:00 749次阅读
    <b class='flag-5'>链表</b>的基础知识

    链表和双链表区别在哪里

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

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

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