【数据结构】数组(Array)

数组(Array)

数组

在计算机科学中,数组数据结构(Array Data Structure)简称数组(Array),是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。
最简单的数据结构类型是一维数组。例如,索引为0到9的32位整数数组,可作为在存储器地址2000,20004,2008,…2036中,存储10个变量,因此索引为i的元素即在存储器中的2000+4i地址。数组的第一个元素的存储器地址称为第一地址或基础地址。
二维数组,对应数学上的矩阵概念,可表示为二维矩形格。例如:
a = 3 6 2 0 1 4 2 1 0 \begin{matrix} 3 & 6 & 2 \\ 0 & 1 & -4 \\ 2 & -1 & 0 \end{matrix}
而计算器编程中的数组看起来像这样,例如C语言中的数组:

int a[3][3] = {
	{ 3,  6,  2 },
	{ 0,  1, -4 },
	{ 2, -1,  0 }
};

在某些情况下,“向量”一词也可能代表二维数组,虽然在数学意义上更确切地称呼为元组(tuple),而不是向量。但需要注意的是:计算机科学的某些领域,如Matlab,元组是类似C语言struct类型,具有固定的往往是不同类型的数据成员的数据结构。
数组通常用于实现数据库的表格,特别是查询表;表格有时也被当做是数组的同义词。
数组是最早期和最重要的数据结构之一,很多程序都会用到数组。它们也用于实现许多其他的数据结构,譬如列表(list)和字符串(string)。它们有成效地开展了计算器的定址逻辑。在大多数现代计算器和许多外部存储设备中,储存器如图一维数组,索引就是其地址。编译器、处理单元(特别是向量处理器),经常会针对数组操作进行优化。
因为在程序运行时可以计算元素的索引,数组是很有用的。此外,也能以单一迭代语句就处理数组的许多元素。为此,数组数据结构的元素必须具有相同的大小,而且应当使用相同的数据类型来表示。
数组一词通常用于表示数组数据类型,一种大多数高端编程语言都会内置的数据类型。数组类型通常由数组结构来实现;然而在某些语言中,它们可以由散列表、链表、搜索树或其他数据结构(以后会详解,现在看不懂也没有关系)来实现。在算法的描述中,数组一词特别着重意义为关系数组或“抽象的数组”,一种理论上的计算器科学模型(抽象数据类型或ADT),专注于数组的基本性质上。

元素标识符和定址公式

当数据对象存储在数组时,个别对象通常借由非负整数的变量来选取。索引也成为下标,可将数组的值对应到存储对象。
有三种方式对数组的元素进行索引:

  • 0(从零开始索引):数组的第一个元素由下标为0开始的索引。如C、C++。
  • 1(从1开始索引):数组的第一个元素由下标为1开始的索引。如Pascal、Delphi语言。
  • n(从n开始索引):可自由选择数组的基本索引。通常,允许从n开始索引的编程语言还允许负数索引值和诸如枚举的其他标量数据类型,也可将字符串当做数组的索引。
    数组可以具备多个维度,因此常见使用多重索引来访问数组。例如,从零开始索引的情况下,有三行和四列的二维数组A需要访问第二行和第四列的元素时,表达式可为A[1,3]。因此,二维数组使用两个索引下标,三维数组使用三个索引下标,n维数组使用n个索引下标。
    指定元素所需要的索引数称为数组的维度,维数或数组的秩。
    标准数组中每个索引会被限制在一定范围内的连续整数(或某些枚举类型的连续值),而元素地址则是对索引值的“线性”计算公式。

猜你喜欢

转载自blog.csdn.net/u011791081/article/details/83242889
今日推荐