数据结构基础篇之数组

数据结构与算法之基础篇——05 | 数组 概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表 线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向 比如数组,链表、队列、栈等 非线性表 数据之间并不是简单的前后关系 比如二叉树、堆、图等 数组如何实现随机访问? 连续的内存空间和相同类型的数据 好处:支持随机访问,根据下标随机访问的时间复... 阅读详情

在每一种语言中都有数组这种数据结构,虽然数组是一种最基本的数据结构,但是我估计有很少人能理解数组的精髓

为什么数组的下标从0开始,而不是从1?这个问题你可以想想。

介绍几个名词

  • 线性表

数据排成像一条线一样的结构,数据最多只有前和后两个方向。

  • 连续的内存空间和相同类型的数据

 

数组是如何实现根据下标随机访问数组元素?

以int[] 数组为例,int的长度是4个子节,定义一个int[5]的数组,首地址假设100,那么每个元素的内存偏移量是4,那么计算机就会分配一个100-119的连续内存空间。

寻址地址 = 首地址 + i*偏移量

插入和删除为什么那么慢?

假设数组的长度是n,在k的位置插入值,就需要将k-n这部分的元素都顺序地往后挪一位,它的时间复杂度是O(n),时间复杂度为(1+2+…n)/n=O(n),删除操作过程跟插入类似。

那么对插入和删除怎么优化呢?

插入:将添加位置的元素移至最后一位,将新添加的元素放在这个位置,时间复杂度变成O(1)。

删除:可以将多个删除操作集中执行,每次的删除操作并不是真正地搬移数据,只是记录数据已经被删除。当数组没有更多空间存储数据时,我们再触发执行一次真正的删除操作,这样就大大减少了删除操作导致的数据搬移,如下图,为了避免 d,e,f,g,h 这几个数据会被搬移三次,我们可以先记录下已经删除的数据,然后统一删除,这和JVM 标记清除垃圾回收算法的核心思想类似。

查找快

数组查询时是通过首地址+偏移量,时间复杂度是O(1)

Java语言中我们几乎每天都在用的ArrayList的底层实现就是数组,这时你应该知道ArrayList为什么查找快,增删慢了。

 

什么情况下用到数组

  • 特别关注性能,或者希望使用基本类型,就可以选用数组
  • 如果数据大小事先已知,并且对数据的操作非常简单,也可以直接使用数组
  • 要表示多维数组时,用数组往往会更加直观

常见Java数组面试问题(答案自己总结印象会更深)

  • ArrayList是如何扩容的

  • ArrayList是底层实现和特点

 

 

OJ(while+cin.get()判断结束) 今天要记录一道看起来十分简单的OJ题目,但开始对于cin的一些操作忘得差不多了,没做出来,故记下来给自己提个醒。 描述 给出包含N个单词的一行输入,输出N行。第一行和输入一样。每次输出过一行后,这一行的第一个单词在下一行被放到最后。 输入 包含N个单词的字符串,单词以一个空格分开。N不在输入中给出,你需要计算单词的数量来获得。字符串包含的字符数小于100。 输出 输出N行。... 阅读详情

相关推荐

车道线检测1.0(Python+Opencv基础版)

车道线检测是指在道路上自动检测和识别车道线的过程。车道线是道路上的标记,用于指示车辆行驶的方向和位置。 通过对车道线进行检测和识别,自动驾驶和智能驾驶系统可以实现车辆的自动导航、车道保持、车道偏离警告等功能。

Dream_orz的博客 4264

数据结构——数组

一、数组的概念   定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。   从概念中可以知道一下几点: 数组是线性表。     所谓的线性表就是数据排成一排,想一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。当然除了数组,链表、队列、栈等也是线性表结构        连续的内存空间和形同类型的数据。   正因为有了上述两个特点,数组才能够有一个堪称“杀手锏”的特性:随机访问 数组实现下标随机访问   下面通过一个实际的例子来说明:.

qq_38361726的博客 1万+

在天问block环境下LU-ASR01与51单片机的基础运用

正确步骤将模块和电脑连接后,仍然显示未连接(如4.1中图片中的编译下载后面显示未连接),可以尝试关闭软件后尝试,如果仍然不行换一条type-c线再试;以上方式都不行,可能要怀疑ASR01硬件损坏,跟商家联系!!!

BUG7073的博客 1万+

把mysql中的数据导入solr

把mysql中的数据导入solr

yyhzzzzzz的博客 444

Matlab App Designer自学笔记(六):坐标轴控件axis函数绘图方法

作用: 绘制函数显示 显示图像(jpg png tiff) 颜色选项: r(红色) g(绿色) b(蓝色) w(白色) k(黑色) 其他 一、坐标区控件及设置 可以对坐标去进行设计: 二、功能实现及编程 功能:点击“绘图按钮”,能显示曲线。 实现:对按钮设置回调函数 若要多个图像显示在一个坐标系中,需要语句:hold(app.UIAxes,"on"); app.UIAxes是这个坐标轴的名字。 function ButtonP...

陶小桃Blog 3万+

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 467

数据结构--数组(详细分析)

数组作为一种固定大小且内存连续的线性数据结构,提供了高效的随机访问能力。

考研小钻风 3621

10、网络安全工具:Bettercap 与 Web 应用测试工具全解析

本文详细解析了网络安全工具Bettercap及其在中间人攻击和无线攻击中的应用,同时介绍了多种Web应用测试工具,如Amass、Cadaver、Dirb等,并探讨了工具的使用场景、流程、注意事项以及未来发展趋势,为网络安全测试提供了全面的指导。

u0v1w2x3的博客 227

02. 数据结构之数组

数组(Array)是有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素。数组是最为简单、最为常用的数据结构。

wlyang666的博客 1608

军品研制过程-转阶段

介绍军品转阶段评审

Abel的博客 2万+

【Word提效 No.010】使用AI一键复制格式刷应用格式

本文介绍利用AI工具WorkBuddy实现Word文档格式批量复制的自动化解决方案。通过简单指令即可将指定段落的格式一键应用到多个目标段落,解决传统格式刷操作繁琐、易出错的问题。方案包含三步操作:准备文档、输入指令模板、验收效果,并提供多种场景的现成指令示例。该工具支持字体、段落等格式属性的批量复制,且不会覆盖原文件,适用于论文、手册等文档的格式统一需求。

u011186532的专栏 77

数据结构之——数组

数组是线性表,就是数据排成像一条直线一样的结构,除了数组,链表,队列,栈都是线性结构 而非线性表就是二叉树,堆,图等,数据之间不是简单的先后关系。 数组有连续的内存空间和相同类型的数据。正式有了这两个限制,才有了一个堪称杀手锏的特性:“随机访问”,但是删除,插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。 数组和链表的区别? 我们时常会回答:链表适合插入,删除,时间复杂度为O(1);数组...

IT荻的博客 4254

RockChip Android14 修改LCD背光最大值

在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。

qq_34968572的博客 631

数据结构基础篇之数组篇章

数据结构基础篇之数组篇章

2301_76874968的博客 1029

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数组——数据结构与算法之美【基础篇】

数组——数据结构与算法之美【基础篇】什么是数组线性表连续的内存空间和相同类型的数据为什么数组要从0开始编码 什么是数组 线性表 数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据 每个线性表上的数据最多只有前后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。 连续的内存空间和相同类型的数据 说到数据的访问,那你知道数组是如何实现根据下标随机访问数组元素的吗?我们拿一个长度为 10 的 int 类型的数组 int[] a = new int[10]来举例。在我画的这个

两年半丶的博客 449

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构基础篇:数组

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

俊伟的博客 213

数据结构与算法——数组(基础篇)

博主也是第一次当博主,想要做一名名副其实的程序员,当然本质可能还是个商科生,看到博客的朋友可以一起交流经验,wechat:LYI_1998 数组的定义: 数组(Array):是一种线性表结构。它用一组连续的内存空间来存储一组具有相同类型的数据,同时它也是最基础的数据结构。 !此处应有线性表概念:数据排成一条线,每个线性表上的数据最多只有前后两个方向。常见的线性表数据结构有:数组、链表、队列...

NobodyH的博客 660

数据结构笔记【基础篇】——数组

数组 数组 (Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表 非线性表 数组是适合查找操作,但是查找的时间复杂度并不为 O(1)。即便是排好序的数组,你用二分查找,时间复杂度也是 O(logn)。所以,正确的表述应该是,数组支持随机访问,根据下标随机访问的时间复杂度为 O(1)。 JVM 标记清除垃圾回收算法的核心思想

Swaggie的笔记博客 194

C 408—《数据结构》算法题基础篇—数组(通俗易懂)

408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 2282

数据结构学习 数组篇 数组基础知识

数组在内存中的存储形式是连续的一段空间,并且数据类型相同。数组的内存地址是连续增长的。数组的下标都是从0开始的。数组是最基础的数据结构。

m0_62947929的博客 180

数据结构与算法-基础篇-数组

二、基础篇 1. 数组 1. 为什么很多编程语言的数组都是从0开始编号的? 从数组存储的内存模型上来看,“下标”确切的说法就是一种“偏移”,相比从1开始编号,从0开始编号会少一次减法运算,数组作为非常基础的数组结构,通过下标随机访问元素又是非常基础的操作,效率的优化就要尽可能的做到极致。 主要的原因是历史原因,C语言的设计者是从0开始计数数组下标的,之后的Java、JS等语言都进行了效仿,或者说是为了减少从C转向Java、JS等的学习成本。 2. 什么是数组? ​ 数组是一个线性数据结构,用一组连续的内

z_yemu的博客 319

数据结构基础篇-线性表-数组

原文地址 数组可以说使我们编程中最常见的数据结构了,在代码中随处可见。我们可以很容易使用类似int[] ints = new int[4];这样的语法构建一个整数数组,那么你了解数组底层的原理吗?接下来我们就来结合数组的特点分析一下数组的原理,并实现一个简单的数组来帮助大家理解的原理。 数组的特点 高效的随机访问特性,使数组能够根据下标以O(1)的时间复杂度随机访问数组中的任意元素(请注意这里随...

weixin_34303897的博客 223

数据结构与算法笔记:基础篇 - 数组:为什么数组都是从0开始编号

本章学习了数组,它可以说是最基础、最简单的数据结构。数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点是支持随机访问,但插入、删除也因此变得比较低效,平均时间复杂度为OnO(n)On。在平时的业务开发中,可以直接使用编程语音提供的容器类,但是,如果特别底层的开发,直接使用数组可能会更适合。

chenjian723122704的专栏 1679

Java版数据结构基础篇——数组(1)

本文介绍了Java中的数组。数组是一种引用数据类型,用于存储同类型数据。数组需要初始化才能使用,分为静态初始化和动态初始化两种。静态初始化是在定义数组时直接初始化元素,动态初始化是先定义再分配内存和初始化。直接打印数组变量只能打印地址,需要遍历元素才能打印内容。初始化数组后才能访问元素。动态初始化更灵活,可变化数组长度。数组广泛应用于存储同类型数据的场景,也可构建更复杂的数据结构。正确理解数组的声明、定义、初始化对于Java开发非常重要。

weixin_47166204的博客 343

Javascript数据结构算法之数组基础篇

数组一个存储元素的线性集合。1. 创建数组var objects = [1, "joe", true, null];isArray() Array.isArray(objects);2. 读写数组数组的长度可以任意增长。3. 由字符串生成数组split()var sentence = "the quick brown fox jumped over the lazy pig"; var words

u011376293的博客 387

byte数组初始化_数据结构基础篇-线性表-数组

数组可以说使我们编程中最常见的数据结构了,在代码中随处可见。我们可以很容易使用类似int[] ints = new int[4];这样的语法构建一个整数数组,那么你了解数组底层的原理吗?接下来我们就来结合数组的特点分析一下数组的原理,并实现一个简单的数组来帮助大家理解的原理。数组的特点高效的随机访问特性,使数组能够根据下标以O(1)的时间复杂度随机访问数组中的任意元素(请注意这里随机访问不是查询哦...

weixin_39883440的博客 472

【学习】数据结构与算法之美——基础篇笔记 数组

目录05 数组什么是数组数组的下标随机访问低效的“插入”和“删除”与巧思1. 插入操作2. 删除操作注意访问越界问题容器 VS 数组06 05 数组 什么是数组 数组是线性表中的一种 数组使用连续的存储空间,存储一组相同类型的数据 数组的下标随机访问 通过寻址公式,计算出该元素存储的内存地址 a[i]_address = base_address + i * data_type_size 值得注意的是,数组的的内存地址分配是[0]在低位,[n-1]在高位。 低效的“插入”和“删除”与巧思 1. 插入

Yummy_Ou 364
上一篇: springboot2.0 配置多数据源保证事务一致性
下一篇: 怎么从海量数据中快速查找某个数据:索引
I`M程序员天花板
博客等级 码龄9年 15粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值