正在载入交互式动画窗口请稍等
数组-存储结构 可视化交互式动画版
什么是数组?
数组是存储在连续内存位置 的 相同变量类型的项目的集合。 它是最流行和最简单的数据结构之一,通常用于实现其他数据结构。 数组中的每个项目都从 0 开始索引。
每个程序员的梦想不仅是成为一名优秀的程序员,而且成为一名伟大的程序员。 我们都想实现我们的目标,为了实现我们的目标,我们必须有一个伟大的计划。 在这种背景下,我们决定提供一个完整的数组面试准备指南,它将帮助您解决面试中最常被问到的问题,例如什么是数组,C语言中的数组是什么,你如何做?在 C 语言中初始化数组、如何对数组进行排序等。 在这份数组面试准备完整指南中, 我们还介绍了诸如热门 理论面试问题 和 热门面试编码问题等主题。
我们可以通过索引值直接访问数组元素。
数组的基本术语
- 数组索引: 在数组中,元素由其索引来标识。 数组索引从0开始。
- 数组元素: 元素是存储在数组中的项目,可以通过其索引进行访问。
- 数组长度: 数组的长度由它可以包含的元素数量决定。
数组的表示
数组的表示可以通过其声明来定义。 声明意味着为给定大小的数组分配内存。
数组可以用不同的语言以不同的方式声明。 为了更好地说明,下面是一些特定于语言的数组声明。
- C++
- C
- Java
- Python
- C#
- JavaScript
C++
int arr[5]; // This array will store integer type element char arr[10]; // This array will store char type element float arr[20]; // This array will store float type element |
C
Java
Python
C#
Javascript
然而,上面的声明是 静态 或 编译时 内存分配,这意味着数组元素的内存是在程序编译时分配的。 这里只会分配固定大小(即方括号 [] 中提到的大小)的内存用于存储,但是您不认为这不会与我们知道数组的大小相同的情况每次,可能会出现我们不知道数组大小的情况。 如果我们声明较大的大小并存储较少数量的元素,将导致内存浪费,或者是我们声明较小的大小的情况,那么我们将不会获得足够的内存来存储其余元素。 在这种情况下,静态内存分配不是首选。
是否可以创建 动态数组 ?
答案是 肯定的 。 可以动态分配内存。 所以, 动态内存分配 是在执行时或运行时分配内存空间的过程。
以下是支持动态内存分配的语言:
- C++
- Java
- Python3
- C#
- JavaScript
- PHP
C++
int *array = new int [5]; |
Java
Python3
C#
Javascript
PHP
为什么需要数组数据结构?
假设有一个班有五名学生,如果我们必须记录他们的考试成绩,我们可以通过声明五个变量并跟踪记录来做到这一点,但如果学生人数变得非常多,那会怎样?操纵和维护数据具有挑战性。
这意味着,当我们有少量对象时,我们可以使用普通变量(v1,v2,v3,..)。 但如果我们想要存储大量实例,用普通变量来管理它们就变得很困难。 数组的想法是在一个变量中表示许多实例 ..
数组类型:
数组主要有两种类型:
-
一维数组(1-D array)
:
您可以将一维数组想象为一行,其中一个接一个地存储元素。
-
二维数组:
2-D
多维数组
可以被视为数组的数组,也可以被视为由行和列组成的矩阵。
-
三维数组:
3-D
多维数组
包含三个维度,因此可以将其视为二维数组的数组。
数组运算的类型:
- 遍历:遍历数组的元素。
- 插入:在数组中插入一个新元素。
- 删除:从数组中删除元素。
- 搜索:在数组中搜索元素。
- 排序:保持数组中元素的顺序。
使用数组的优点 :
- 数组允许随机访问元素。 这使得按位置访问元素变得更快。
- 数组具有更好的缓存局部性,这在性能上有很大的差异。
- 数组使用单个名称表示相同类型的多个数据项。
- 数组存储多个具有相同名称的相似类型的数据。
- 数组数据结构用于实现其他数据结构,如链表、堆栈、队列、树、图等。
数组的缺点 :
- 由于数组的大小是固定的,一旦分配了内存,就无法增加或减少,因此无法在需要时存储额外的数据。 固定大小的数组称为静态数组。
-
为数组分配少于所需的内存会导致数据丢失。
数组本质上是同构的,因此单个数组不能存储不同数据类型的值。 - 数组将数据存储在连续的内存位置,这使得删除和插入非常难以实现。 通过实现链表可以克服这个问题,链表允许顺序访问元素。
数组的应用 :
- 它们用于实现其他数据结构,例如数组列表、堆、哈希表、向量和矩阵。
- 数据库记录通常以数组的形式实现。
- 它用于计算机的查找表。
- 它用于不同的排序算法,例如冒泡排序、插入排序、合并排序和快速排序。
热门理论面试问题
编号 |
问题 |
回答 |
---|---|---|
1 | 如果不初始化数组会发生什么? | 看法 |
2 | 为什么从数组中获取值的复杂度是 O(1) | 看法 |
3 | 什么时候应该使用数组而不是列表? | 看法 |
4 | 什么是循环排序数组? | 看法 |
5 | 使用哈希图比较两个数组? | 看法 |
6 |
“链表相对于数组有什么优点?
我们在什么场景下
使用LinkedList,什么时候使用Array?” |
看法 |
7 | 如何迭代多维数组的行和列? | 看法 |
8 | 稀疏数组是什么意思? | 看法 |
9 | 堆相对于排序数组有什么好处? | 看法 |
10 | int[] a 和 int a[] 有什么区别吗? | 看法 |
11 | 我们可以将数组大小声明为负数吗? | 看法 |
12 | 我们知道数组是对象,为什么我们不能写strArray.length()呢? | 看法 |
13 | 排序数组有什么优点? | 看法 |
14 | 什么定义了数组的维数? | 看法 |
15 | 如何检查数组是否包含值? | 看法 |
16 | 如何在另一个数组/列表中创建数组/列表? | 看法 |
17 号 | 如何获取数组中最大和最小的数? | 看法 |
18 | 如何返回多维数组中字符串的坐标/索引? | 看法 |
19 | 如何从 Java 数组中删除对象? | 看法 |
20 | C如何在多维数组中分配数据项? | 看法 |
21 | 获取二维数组中的相邻元素? | 看法 |
22 | C++ 如何使用和传递 3 维 char 数组? | 看法 |
23 | Java 中的匿名数组 | 看法 |
24 | Java中数组的默认值是多少? | 看法 |
25 | 如何将一个数组复制到另一个数组中? | 看法 |
26 | java中如何迭代数组? | 看法 |
27 | 如何将两个已排序数组合并为一个已排序数组? | 看法 |
28 | 我们可以在Java中使数组可变吗? | 看法 |
29 | 反转数组的逻辑是什么? | 看法 |
30 | 如何获取数组元素的索引? | 看法 |
31 | 我们可以在初始化后扩展数组吗? | 看法 |
32 | 如何填充数组中的元素(立即初始化)? | 看法 |
33 | Java中数组和字符串的区别 | 看法 |
34 | 打印总和为 0 的所有子数组 | 看法 |
35 | 数组的平衡索引 | 看法 |
36 | 如何检查数组是否包含值? | 看法 |
37 | 如何从数组中取出前两个数字? | 看法 |
38 | 如何用一个数组实现3个栈? | 看法 |
前 50 个面试编码问题
数组上的简单问题
编号 |
问题 |
文章 |
实践 |
---|---|---|---|
1 | 编写一个程序来反转数组 | 看法 | 解决 |
2 | 查找数组中的最小和最大元素 | 看法 | 解决 |
3 | 峰元 | 看法 | 解决 |
4 | 编写一个程序对给定数组进行排序 | 看法 | 解决 |
5 | 查找数组中第 K 大和第 K 小的数 | 看法 | 解决 |
6 | 查找数组中整数的出现次数 | 看法 | 解决 |
7 | 对 0、1 和 2 的数组进行排序 | 看法 | 解决 |
8 | 具有给定 Sum 的子数组 | 看法 | 解决 |
9 | 将所有负数元素移动到数组的一侧 | 看法 | 解决 |
10 | 求两个已排序数组的并集和交集 | 看法 | 解决 |
数组中的中等问题
编号 |
问题 |
文章 |
实践 |
---|---|---|---|
1 | 编写一个程序,将数组循环旋转一位 | 看法 | 解决 |
2 | 找到缺失的整数 | 看法 | 解决 |
3 | 计算给定总和的对 | 看法 | 解决 |
4 | 查找数组中的重复项 | 看法 | 解决 |
5 | 使用快速排序算法对数组进行排序 | 看法 | 解决 |
6 | 查找三个排序数组中的共同元素 | 看法 | 解决 |
7 | 查找整数数组中的第一个重复元素 | 看法 | 解决 |
8 | 查找给定整数数组中的第一个非重复元素 | 看法 | 解决 |
9 | 1 和 0 相等的子数组 | 看法 | 解决 |
10 | 以交替的正项和负项重新排列数组 | 看法 | 解决 |
11 | 查找是否存在总和为零的子数组 | 看法 | 解决 |
12 | 找到最大和的连续子数组 | 看法 | 解决 |
13 | 求一个大数的阶乘 | 看法 | 解决 |
14 | 求最大乘积子数组 | 看法 | 解决 |
15 | 找到最长的连续子序列 | 看法 | 解决 |
16 | 查找旋转和排序数组中的最小元素 | 看法 | 解决 |
17 号 | 配置中的最大总和 | 看法 | 解决 |
18 | 最低平台 | 看法 | 解决 |
19 | 最小化高度之间的最大差异 | 看法 | 解决 |
20 | 到达终点的最少跳跃次数 | 看法 | 解决 |
21 | 库存跨度问题 | 看法 | 解决 |
23 | 找到总和为给定值的三元组 | 看法 | 解决 |
23 | 最小正缺失数 | 看法 | 解决 |
24 | 查找 1 数量最多的行 | 看法 | 解决 |
25 | 以螺旋方式打印矩阵 | 看法 | 解决 |
26 | 判断一个数组是否是另一个数组的子集 | 看法 | 解决 |
27 | 在数组中实现两个堆栈 | 看法 | 解决 |
28 | 多数元素 | 看法 | 解决 |
29 | 波阵 | 看法 | 解决 |
30 | 收集雨水 | 看法 | 解决 |
难题
编号 |
问题 |
文章 |
实践 |
---|---|---|---|
1 | 最大索引 | 看法 | 解决 |
2 | 两个数组中的最大总路径 | 看法 | 解决 |
3 | 查找缺失和重复 | 看法 | 解决 |
4 | 股票买卖问题 | 看法 | 解决 |
5 | 与排序数组中的给定总和配对 | 看法 | 解决 |
6 | 巧克力分配问题 | 看法 | 解决 |
7 | 划分相等子集和 | 看法 | 解决 |
8 | 无法表示为和的最小正整数 | 看法 | 解决 |
9 | 硬币找零问题 | 看法 | 解决 |
10 | 最长交替子序列 | 看法 | 解决 |
有关数组的常见问题 (FAQ)
1.什么是数据结构中的数组并举例说明?
数组是存储在连续内存位置的相同数据类型的项目的集合。 前任。 int arr[5] = {1,2,3,4,5};
2.为什么数组是一种数据结构?
数组存储相同类型的元素,它们被归类为同类数据结构。 它们可以存储数字、字符串、字符、布尔值(true 和 false)、对象等。
3. 数组是什么数据结构?
数组是一种 线性数据结构 ,它将相似的元素存储在连续的内存位置中。
4. 数组有哪些类型?
数组主要有两种类型:
- 一维数组
- 多维数组
5. 数据如何存储在数组中?
数组是存储在连续内存位置的相同数据类型的项目的集合,或者说元素一个接一个地存储在内存中。 数组使用从 0 开始到 (n-1) 的索引系统,其中 n 是其大小。
6. 数组和结构体的区别?
结构体可以包含不同类型的变量,但数组只能包含相同类型的变量。
7. 数组有哪些限制?
数组是相同数据类型的项目的集合。 这意味着,在整数数组中只能存储整数值,而在浮点数组中只能存储浮点值,而字符数组只能存储字符。 因此,任何数组都不能具有两种数据类型的值。
8. 阵列有什么优点?
数组数据结构有多种优点,其中包括:
- 数组允许随机访问元素。 这使得按位置访问元素变得更快。
- 数组存储多个具有相同名称的相似类型的数据。
- 数组数据结构用于实现其他数据结构,如链表、堆栈、队列、树、图等。
9. 使用数组的目的是什么?
当需要使用多个相同类型的变量时,可以使用数组,并且可以将其定义为相同类型的对象序列。
10.什么是多维数组?
多维数组可以称为以表格形式存储同质数据的数组的数组。 多维数组 中的数据 按行优先顺序存储。
结论
经过讨论,我们得出的结论是,数组是一种通过对相同类型的元素进行分组来访问元素的简单方法,我们可以通过元素的索引有效地找到元素,并可以使用它们执行不同的操作。 因此,它们在内存分配方面更加高效,并且应该在所有现代编程语言中使用。 因此,这成为面试时最喜欢的话题,大多数公司普遍询问阵列上的问题。 由于所有这些原因,我们必须对其有充分的了解。
相关文章:
- 如何开始数据学习DSA?
- 竞争性编程 – 完整指南
- 如何轻松掌握数据结构和算法?
- 为什么数据结构和算法很重要?
- 编码挑战和竞赛排名前 15 的网站
- SDE SHEET – SDE 准备的完整指南
- Amazon SDE 表 – Amazon SDE 面试准备指南
- 软件工程师的 Google 面试准备 – 完整指南
- 100 天编程 – 初学者和经验丰富的人的完整指南