📜  数组简介

📅  最后修改于: 2022-05-13 01:57:51.959000             🧑  作者: Mango

数组简介

数组是存储在连续内存位置的项目的集合。这个想法是将多个相同类型的项目存储在一起。这使得计算每个元素的位置变得更容易,只需将偏移量添加到基值,即数组第一个元素的内存位置(通常由数组的名称表示)。基值是索引 0,两个索引之间的差是偏移量。
为简单起见,我们可以将数组视为一组楼梯,其中每一步都放置一个值(假设您的一个朋友)。在这里,您只需知道他们所走的步数即可识别任何朋友的位置。
请记住:“下一个索引的位置取决于我们使用的数据类型”。

大批

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

数组的大小

在 C 语言中,数组具有固定大小的含义,一旦给定大小,它就无法更改,即您不能缩小它也不能扩展它。原因是为了扩展,如果我们改变大小,我们不能确定(不可能每次都)我们得到下一个内存位置是免费的。收缩不起作用,因为数组在声明时会静态分配内存,因此编译器是唯一可以破坏它的人。
数组中的索引类型

  • 0(从零开始的索引):数组的第一个元素由下标 0 索引。
  • 1(从一开始的索引):数组的第一个元素由 1 的下标索引。
  • n(基于 n 的索引):可以自由选择数组的基本索引。通常,允许基于 n 的索引的编程语言也允许负索引值,并且其他标量数据类型(如枚举或字符)可以用作数组索引。


C++
#include 
using namespace std;
 
int main()
{
    // Creating an integer array named arr of size 10.
    int arr[10];
    // accessing element at 0 index and setting its value
    // to 5.
    arr[0] = 5;
    // access and print value at 0 index we get the output
    // as 5.
    cout << arr[0];
    return 0;
}


C
#include 
 
int main()
{
 
    // Creating an integer array named arr of size 10.
    int arr[10];
    // accessing element at 0 index and setting its value
    // to 5.
    arr[0] = 5;
    // access and print value at 0 index we get the output
    // as 5.
    printf("%d", arr[0]);
 
    return 0;
}


输出
5

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

使用数组的优点:

  • 数组允许随机访问元素。这使得按位置访问元素更快。
  • 数组具有更好的缓存局部性,这在性能上有很大的不同。
  • 数组使用一个名称表示相同类型的多个数据项。

使用数组的缺点:
你不能改变大小,即一旦你声明了数组,你就不能因为静态内存分配而改变它的大小。这里插入和删除很困难,因为元素存储在连续的内存位置中,并且移位操作也很昂贵。
现在如果以使用数组实现数据结构堆栈为例,则存在一些明显的缺陷。
我们来看看栈的POP操作。该算法将是这样的。

  1. 检查堆栈下溢
  2. 将顶部减 1

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

例子 -

// A character array in C/C++/Java
char arr1[] = {'g', 'e', 'e', 'k', 's'};

// An Integer array in C/C++/Java
int arr2[] = {10, 20, 30, 40, 50};

// Item at i'th index in array is typically accessed
// as "arr[i]".  For example arr1[0] gives us 'g'
// and arr2[3] gives us 40.

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

阵列上的应用

  1. 数组存储相同数据类型的数据元素。
  2. 数组可用于 CPU 调度。
  3. 用于实现其他数据结构,如堆栈、队列、堆、哈希表等。