数组和链表的区别和优缺点总结!

数组和链表的区别和优缺点总结!数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点。链表中各结点在内存中的存放位置是任意的。 链表与数组的主要区别(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请:(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系…

大家好,又见面了,我是你们的朋友全栈君。

数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点。

链表中各结点在内存中的存放位置是任意的。 

链表与数组的主要区别

(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;

(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请:

(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系由结点所包含的指针来体现。

(4)对于不是固定长度的列表,用可能最大长度的数组来描述,会浪费许多内存空间。

(5)对于元素的插人、删除操作非常频繁的列表处理场合,用数组表示列表也是不适宜的。若用链表实现,会使程序结构清晰,处理的方法也较为简便。

例如在一个列表中间要插人一个新元素,如用数组表示列表,为完成插人工作,插人处之后的全部元素必须向后移动一个位置空出的位置用于存储新元素。

对于在一个列表中删除一个元素情况,为保持数组中元素相对位置连续递增,删除处之后的元素都得向前移一个位置。如用链表实现列表.链表结点的插人或删除操作不再需要移动结点,只需改变相关的结点中的后继结点指针的值即可,与结点的实际存储位置无关。
 

数组的特点

  • 在内存中,数组是一块连续的区域。 
  • 数组需要预留空间,在使用前要先申请占内存的大小,可能会浪费内存空间。 
  • 插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。
  • 随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据。
  • 并且不利于扩展,数组定义的空间不够时要重新定义数组。

链表的特点

  • 在内存中可以存在任何地方,不要求连续。 
  • 每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据。 第一个人知道第二个人的座位号,第二个人知道第三个人的座位号……
  • 增加数据和删除数据很容易。 再来个人可以随便坐,比如来了个人要做到第三个位置,那他只需要把自己的位置告诉第二个人,然后问第二个人拿到原来第三个人的位置就行了。其他人都不用动。
  • 查找数据时效率低,因为不具有随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,以此类推。 要找到第三个人,必须从第一个人开始问起。
  • 不指定大小,扩展方便。链表大小不用定义,数据随意增删。

各自的优缺点

数组的优点

  • 随机访问性强
  • 查找速度快

数组的缺点

  • 插入和删除效率低
  • 可能浪费内存
  • 内存空间要求高,必须有足够的连续内存空间。
  • 数组大小固定,不能动态拓展

链表的优点

  • 插入删除速度快
  • 内存利用率高,不会浪费内存
  • 大小没有固定,拓展很灵活。

链表的缺点

  • 不能随机查找,必须从第一个开始遍历,查找效率低
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149443.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android传感器开发与智能设备案例实战_Android移动应用开发

    Android传感器开发与智能设备案例实战_Android移动应用开发学习内容Ø传感器的基本概念ØAndroid中常见的传感器Ø如何在Android中开发传感器应用能力目标Ø了解传感器的基本概念Ø掌握Android中常见的传感器Ø掌握Android环境下如何使用SensorSimulator进行传感器开发Ø熟练掌握加速度传感器的开发步骤Ø熟练掌握方向传感器的开发步骤本章简介Android是一个面向应用程序开发的丰富平台,它除了拥有许多具有吸引力的用户

  • 44页智慧生活社区+智慧小区建设方案[通俗易懂]

    44页智慧生活社区+智慧小区建设方案[通俗易懂]喜欢文章可以【转发➕评论】,关注公众号“智慧方案文库“,私信获取解决方案。本文章引用的资料均通过互联网等公开渠道合法获取,仅作为行业交流和学习使用,并无任何商业目的。其版权归原资料作者或出版社所有,作者不对所涉及的版权问题承担任何法律责任。若版权方、出版社认为本文章侵权,请立即通知作者删除。更多方案【2021】77页数字李生智慧园区解决方案(附下载)【2021】102页新一代数字化转型信息化总体规划方案(附下载)【2021】85页5G+物联网智慧校园解决方案(附下载)【2021】60页智慧城市运营管理平台

    2022年10月17日
  • jq 获取有焦点的input_jquery获得焦点和失去焦点

    jq 获取有焦点的input_jquery获得焦点和失去焦点前端网站中如果存在一些让用户填写内容的表单元素的话,我们可以使用JQ中获得焦点事件和失去焦点事件,来给用户作出一些提示的内容。今天我们就说一说JQuery下获得焦点和失去焦点的事件的使用方法。jqueryfocus()获得焦点事件focus()方法:当通过鼠标点击选中元素或通过tab键定位到元素时,该元素就会获得焦点。语法:例:input输入框获得焦点时改变其边框的颜色示例代码:当鼠标移入…

  • pycharm怎么打包成exe文件_pycharm写好的程序打包

    pycharm怎么打包成exe文件_pycharm写好的程序打包对于python3,将完成的python工程打包成exe运行,需要用到pyinstaller模块,具体操作方法如下:一、安装pyinstaller模块2、打包选择控制台Terminal输入pyinstaller-FXXXX.py/***附参数集合:–icon=图标路径(pyinstaller-F–icon=my.icoXXXX.py)-F打包成一个e…

  • Option 82在校园网的应用与实现(转)[通俗易懂]

    Option 82在校园网的应用与实现(转)[通俗易懂]作者:南京政治学院上海分院教育技术中心陈晓晖经过近几年的建设,各高校大体完成了校园网基础环境建设,将建设重点逐步转移到信息资源与应用服务上,校园网的安全也越来越受重视,迫使网络管理员比以往更加需要在加强网络安全和便于使用之间找到一个平衡点。笔者认为在具备802.1x认证的硬件条件下,引入Option82构建一个权限分配清晰的校园网是一项可行的措施。 DHCPOption82说明和关键点

  • 常用的CSS[持续更新]

    常用的CSS[持续更新]

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号