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

数据结构:数组和链表的区别(数组和链表的优缺点 & 数组和链表的适用场景)数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点数组一、数组的特点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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OriginPro绘图过程中遇到的问题及解决办法

    OriginPro绘图过程中遇到的问题及解决办法y轴标题如何只显示单位不显示长名称?选中坐标轴标题,右击,选择属性,将文本内容由%(?Y)改为%(?Y,@lu),即可。此为软件内部代码,可以正常使用。

    2022年5月29日
    78
  • 构造函数隐式转换_构造函数实例化对象

    构造函数隐式转换_构造函数实例化对象转载博客:http://blog.csdn.net/thefutureisour/article/details/7705771构造函数隐式转换构造函数会引起一个不引人注意的问题:用单个实参来调用的构造函数定义了从从形参类型到类类型的一个隐式转换。举个例子说:classSales_item{public:std::istream&input(std…

    2022年10月11日
    4
  • 深究–CSS中px、rem与em的区别

    深究–CSS中px、rem与em的区别前言:随着PC端的网页盛行,移动端作为重要的一部分,也是火热的发展,但是鉴于一些单位的使用,我们并不知道该怎样去使用,那么今天我们来看看常用的三种单位PX、rem与em。目录:一.PX1.概念:2.特点:二.rem一.PX1.概念:px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。PX:px是pixel的缩写,是像素单位也是为影像显示的基本单位,译自英文“pixel”,pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel,

    2022年6月18日
    32
  • MT4-EA自动化交易研究笔记(2022-04-23)

    MT4-EA自动化交易研究笔记(2022-04-23)目录昨日交易总体情况昨日EA更新内容待解决问题/对于交易策略的思考当前在用的EA介绍昨日交易总体情况实盘(第一张)与模拟盘(第二张)盈利情况对比图存在问题及分析昨天的实盘收益又是只有模拟盘的一半,原因还是对自己的交易系统不够自信,怕出现大行情大亏而根据自己的经验只跟了部分信号,有些信号开单前我把自动EA给关闭了,事后证明那些信号都是对的。昨天模拟盘是全程开着自动EA,无人工干预的,对于下午的那场大跌,虽然开仓有点早,而且是反向的,不过经过我的加仓策略,最终还是盈利出…

    2022年5月30日
    42
  • hvie hbase各自的使用场景

    hvie hbase各自的使用场景hvie hbase各自的使用场景

    2022年4月23日
    65
  • java bigdecimal除法(java加减乘除运算)

    BigDecimal bignum1 = new BigDecimal("10");  BigDecimal bignum2 = new BigDecimal("5");  BigDecimal bignum3 = null;    //加法  bignum3 =  bignum1.add(bignum2);       System.out.println("和 是:" + bignum3); …

    2022年4月14日
    291

发表回复

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

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