数据结构和算法之数组(难度级别:初级)

简介: 数据结构和算法之数组(难度级别:初级)

数组是存储在连续内存位置的项目的集合。这个想法是将多个相同类型的项目存储在一起。这使得通过简单地将偏移量添加到基值,即数组的第一个元素的内存位置(通常由数组的名称表示)来更容易地计算每个元素的位置。基值是索引 0,两个索引之间的差值是偏移量。


为简单起见,我们可以将数组视为一组楼梯,其中每一步都放置了一个值(假设您的一个朋友)。在这里,您可以通过简单地知道他们所走的步数来识别任何朋友的位置。


请记住:“下一个索引的位置取决于我们使用的数据类型”。

上图可以看作是楼梯的顶层视图,您位于楼梯底部。每个元素都可以通过它在数组中的索引来唯一标识(与您可以通过上面示例中的朋友所在的步骤来标识您的朋友的方式类似)。


数组的大小


在 C 语言中,数组具有固定大小,这意味着一旦给定了大小,它就无法更改,即您不能缩小它,也不能扩展它。原因是为了扩展,如果我们改变大小,我们不能确定(每次都不可能)我们是否可以免费获得下一个内存位置。收缩将不起作用,因为数组在声明时会静态获取内存,因此编译器是唯一销毁它的人。


数组中的索引类型 :


0(从零开始的索引):数组的第一个元素由下标 0 索引。

1(从一开始的索引):数组的第二个元素以 1 的下标进行索引。

n(基于 n 的索引):可以自由选择数组的基本索引。通常,允许基于 n

的索引的编程语言也允许负索引值,并且其他标量数据类型(如枚举或字符)可用作数组索引。

image.png

C++代码


#include <iostream>
using namespace std;
int main()
{
  // 创建一个大小为 10 的名为 arr 的整数数组。
  int arr[10];
  // 访问 0 索引处的元素并将其值设置为 5。
  arr[0] = 5;
  // 在 0 索引处访问和打印值,我们得到输出为 5。
  cout << arr[0];
  return 0;
}


这里输出了值 5,因为第一个元素的索引为零,并且在第零个索引处我们已经分配了值 5。


使用数组的优点:


数组允许随机访问元素。这使得按位置访问元素更快。

数组具有更好的 缓存位置 ,可以在性能上产生相当大的差异。

数组使用单个名称表示相同类型的多个数据项。

使用数组的缺点:


你不能改变大小,即一旦你声明了数组,你就不能改变它的大小,因为分配给它的静态内存。这里插入和删除很困难,因为元素存储在连续的内存位置,并且移位操作也很昂贵。

现在如果以使用数组实现数据结构 Stack 为例,有一些明显的缺陷。

我们以栈的POP操作为例。算法会像这样。


1.检查堆栈下溢

2.将顶部减 1


所以我们正在做的是,指向最顶层元素的指针是递减的,这意味着我们实际上只是限制了我们的视图,如果您有任何原始数据类型,则元素停留在那里谈论内存空间,那么它可能没问题,但是数组会占用大量内存。


例子


// C/C++/Java 中的字符数组 char arr1[] = {‘g’, ‘e’, ‘e’, ‘k’, ‘s’};

// C/C++/Java 中的整数数组 int arr2[] = {10, 20, 30, 40, 50};

// 通常访问数组中第 i 个索引处的项目 // 作为“arr[i]”。例如 arr1[0] 给我们 ‘g’ // arr2[3] 给了我们

40。

通常,字符数组称为“string”,而整数或浮点数数组则简称为数组。


数组上的应用


1.数组存储相同数据类型的数据元素。

2.数组可用于 CPU 调度。

3.用于实现其他数据结构,如堆栈、队列、堆、哈希表等。


目录
相关文章
|
16天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
27 1
|
19天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
63 4
|
17天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
17天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
25天前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
86 23
|
25天前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
57 20
|
17天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
38 5
|
16天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
42 1
|
25天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
44 4
|
25天前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
44 0