数据结构:数组和链表的区别(数组和链表的优缺点 & 数组和链表的适用场景)

数据结构:数组和链表的区别(数组和链表的优缺点 & 数组和链表的适用场景)数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点数组一、数组的特点1.在内存中,数组是一块连续的区域2.数组需要预留空间在使用前需要提前申请所占内存的大小,这样不知道需要多大的空间,就预先申请可能会浪费内存空间,即数组空间利用率低ps:数组的空间在编译阶段就需要进行确定,所以需要提前给出数组空…

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

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

数组

一、数组的特点

1.在内存中,数组是一块连续的区域
2.数组需要预留空间

在使用前需要提前申请所占内存的大小,这样不知道需要多大的空间,就预先申请可能会浪费内存空间,即数组空间利用率低
ps:数组的空间在编译阶段就需要进行确定,所以需要提前给出数组空间的大小(在运行阶段是不允许改变的)

3.在数组起始位置处,插入数据和删除数据效率低。

插入数据时,待插入位置的的元素和它后面的所有元素都需要向后搬移
删除数据时,待删除位置后面的所有元素都需要向前搬移

4.随机访问效率很高,时间复杂度可以达到O(1)

因为数组的内存是连续的,想要访问那个元素,直接从数组的首地址处向后偏移就可以访问到了

5.数组开辟的空间,在不够使用的时候需要扩容,扩容的话,就会涉及到需要把旧数组中的所有元素向新数组中搬移
6.数组的空间是从栈分配的

二、数组的优点

随机访问性强,查找速度快,时间复杂度为O(1)

三、数组的缺点

1.头插和头删的效率低,时间复杂度为O(N)
2.空间利用率不高
3.内存空间要求高,必须有足够的连续的内存空间
4.数组空间的大小固定,不能动态拓展

链表

一、链表的特点

1.在内存中,元素的空间可以在任意地方,空间是分散的,不需要连续
2.链表中的元素都会两个属性,一个是元素的值,另一个是指针,此指针标记了下一个元素的地址

每一个数据都会保存下一个数据的内存的地址,通过此地址可以找到下一个数据

3.查找数据时效率低,时间复杂度为O(N)

因为链表的空间是分散的,所以不具有随机访问性,如要需要访问某个位置的数据,需要从第一个数据开始找起,依次往后遍历,直到找到待查询的位置,故可能在查找某个元素时,时间复杂度达到O(N)

4.空间不需要提前指定大小,是动态申请的,根据需求动态的申请和删除内存空间,扩展方便,故空间的利用率较高
5.任意位置插入元素和删除元素效率较高,时间复杂度为O(1)
6.链表的空间是从堆中分配的

二、链表的优点

1.任意位置插入元素和删除元素的速度快,时间复杂度为O(1)
2.内存利用率高,不会浪费内存
3.链表的空间大小不固定,可以动态拓展

三、链表的缺点

随机访问效率低,时间复杂度为0(N)

这里写图片描述

综上:

对于想要快速访问数据,不经常有插入和删除元素的时候,选择数组
对于需要经常的插入和删除元素,而对访问元素时的效率没有很高要求的话,选择链表
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147966.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android4种activity启动模式_简述activity的启动模式

    android4种activity启动模式_简述activity的启动模式测试应用主activityA使用默认启动模式ACTIVITYMANAGERACTIVITIES(dumpsysactivityactivities)Display#0(activitiesfromtoptobottom): Stack#5:   Taskid#27   *TaskRecord{4f29769#27A=com.wp.laun

    2022年9月27日
    0
  • C++中decltype与左值和右值「建议收藏」

    1decltype关键字decltype是C++11中引入的新的类型说明符。编译器根据分析表达式或者函数返回值来分析其类型。decltype的详细用法,请参考《C++中decltype的使用方法》2decltype与左值和右值decltype后面跟的表达式是左值或者右值时,编译器分析的类型会有所不同。如果表达式(非单个变量)的求值结果是左值,则编译器会得到一个引用类型;如果表达式(非单个变量)的求值结果是右值,则编译器会得到一个与表达式相同的类型。intarr[2]={10,2.

    2022年4月8日
    84
  • 怎样在python上安装jieba库_无法安装lxml库

    怎样在python上安装jieba库_无法安装lxml库jieba库是python的一个三方扩展库,想要使用就需要大家下载和安装之后才可以,但有不少同学不知道该如何操作。今天小千就来给大家介绍如何安装jieba库。安装jieba库步骤在安装之前同学们一定要正确安装python运行环境,这一步就不介绍了。1.之后我们打开CMD命令提示,按下win+r,在里面输入CDM即可。2.随后我们在打开的窗口中直接输入命令:pipinstalljieba,然后按下回车之后就会自动开始下载安装,我们只需要等待一会即可。3.安装完成之后,如果不确定是否正确安装,

    2022年9月21日
    0
  • linux环境变量的配置_linux设置java的环境变量

    linux环境变量的配置_linux设置java的环境变量前言在自定义安装软件的时候,经常需要配置环境变量,下面进行详细解析 环境变量配置文件|用户|配置文件||:|:||系统环境|/ect/profil

    2022年8月6日
    27
  • 【Unity3D插件】AVPro Video插件分享《视频播放插件》

    参考资料http://www.onlinedown.net/soft/987730.htmhttps://blog.csdn.net/yiwei151/article/details/78415771https://blog.csdn.net/dark00800/article/details/56015917简介AvproVideo是一款由RenderHeads出品的可以在…

    2022年4月17日
    75
  • 基于VUE + Echarts 实现可视化数据大屏展示效果[通俗易懂]

    基于VUE + Echarts 实现可视化数据大屏展示效果[通俗易懂]中国(寿光)国际蔬菜科技博览会智慧农业系统—LED拼接屏展示前端开发文档上线后呈现效果:一、开发需求及方案制定1、确定现场led拼接屏的宽高比,按照1920px*1080px的分辨率,F11全屏后刚好占满整屏且无滚动条;2、与产品设计确定页面相关功能:第一屏相关功能:实时时间、当地天气、菜博会基本信息、图表数据统计(近三日人流量、…

    2022年6月7日
    102

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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