数据结构中的多维数组

12 Aug 2025 | 阅读 15 分钟

多维数组本质上是数组的数组。它允许我们将数据存储在表格或网格状结构中,因此适用于矩阵、游戏棋盘或任何需要多个维度的数据的场景。当我们希望以表格形式(行和列)存储数据时,它非常有用。多维数组可以是二维、三维,直到 N 维。

二维数组

在二维数组中,每一行都是一个一维数组。声明二维数组的语法与一维数组非常相似,如下所示。

语法(声明、初始化和赋值)

对于 r = 3, c = 3,将生成以下二维数组。

Multidimensional Array in Data Structure

由于数组使用零索引来存储元素,因此行从 0 到 r - 1,列从 0 到 c - 1。让我们看看二维数组在各种语言中的实现。

在 Python 中实现

编译并运行

Java 实现

编译并运行

C++ 中的实现

编译并运行

C 语言实现

编译并运行

C#中的实现

编译并运行

输出

The elements of the array are: 
1 2 3 
4 5 6 
7 8 9  

三维数组

三维数组是二维数组的扩展。在三维数组中,可以放置多个二维数组。

一个包含三个二维数组(或块)的三维数组,每个二维数组有三行三列,可以表示为

Multidimensional Array in Data Structure

在 Python 中实现

编译并运行

Java 实现

编译并运行

C++ 中的实现

编译并运行

C 语言实现

编译并运行

C#中的实现

编译并运行

输出

The elements of the array are: 
1 2 3 
4 5 6 
7 8 9 
10 11 12 
13 14 15 
16 17 18   

将二维数组映射到一维数组

谈到二维数组的映射,大多数人可能会想为什么需要这种映射。然而,二维数组是从用户的角度存在的。创建二维数组是为了实现类似关系数据库表的数据结构。在计算机内存中,二维数组的存储技术与一维数组类似。

二维数组的大小等于数组中行数和列数之积。我们需要将二维数组映射到一维数组以将其存储在内存中。

下图显示了一个 3 × 3 的二维数组。然而,这个数组需要映射到一个一维数组才能存储在内存中。

Multidimensional Array in Data Structure

将二维数组元素存储到内存中有两种主要技术:

1. 行主序

在行主序中,二维数组的所有行都连续存储在内存中。以上图所示的数组为例,其按照行主序的内存分配如下所示。

Multidimensional Array in Data Structure

首先,数组的第 1 行完全存储在内存中,然后数组的第 2 行完全存储在内存中,依此类推,直到数组的最后一行。

Multidimensional Array in Data Structure

在 Python 中实现

编译并运行

Java 实现

编译并运行

C++ 中的实现

编译并运行

C 语言实现

编译并运行

C#中的实现

编译并运行

输出

The elements of the 2D array are: 
1 2 3 
4 5 6 
7 8 9 

The elements of the 1D array are: 
1 2 3 4 5 6 7 8 9

2. 列主序

根据列主序,二维数组的所有列都连续存储在内存中。以上图所示的数组的内存分配如下。

Multidimensional Array in Data Structure

首先,数组的第 1 列完全存储在内存中,然后数组的第 2 列完全存储在内存中,依此类推,直到数组的最后一列。

Multidimensional Array in Data Structure

在 Python 中实现

编译并运行

Java 实现

编译并运行

C++ 中的实现

编译并运行

C 语言实现

编译并运行

C#中的实现

编译并运行

输出

The elements of the 2D array are: 
1 2 3 
4 5 6 
7 8 9 

The elements of the 1D array are: 
1 4 7 2 5 8 3 6 9 

注意:二维数组转换为一维数组的方式,三维数组也可以采用同样的方式。读者需要自己尝试。

多维数组的应用

  • 使用多维矩阵可以将数据以更易于管理的形式(表格形式)进行组织。例如,使用三维数组或矩阵来组织学生数据,例如学生的学号、分数和学生图像。
  • 在动态规划问题中,多维数组对于存储动态规划问题的中间结果非常有用。除此之外,它们还用于各种标准问题,例如:图的邻接矩阵表示、矩阵乘法和网格搜索问题。

多维数组选择题

1. 下列二维数组的列主序是什么?

  1. {1, 5, 3, 4, 2, 6}
  2. {1, 2, 3, 4, 5, 6}
  3. {1, 4, 2, 5, 3, 6}
  4. {1, 4, 3, 6, 2, 5}

答案:c)

解释:在列主序中,先考虑第一列,然后考虑第二列,最后考虑第三列。


2. 下列二维数组的行主序是什么?

  1. {4, 5, 6, 1, 2, 3}
  2. {1, 2, 3, 4, 5, 6}
  3. {1, 4, 2, 5, 3, 6}
  4. {1, 2, 3, 4, 5, 6}

答案: d)

解释:在行主序中,首先考虑第一行,然后考虑第二行。


3. ___________ 不是多维数组。

  1. 三维数组
  2. 四维数组
  3. 矩阵

答案: d)

解释:三维数组、四维数组和矩阵都是多维数组,而树不是多维数组。树通常使用基本结构实现。


4. 多维数组是 ______________ 的扩展。

  1. 链表
  2. 一维数组
  3. Stack

答案: b)

解释:多维数组是一维数组的扩展。可以说它是一个数组的数组。


5. 多维数组通常被视为 _____________。

  1. 网格
  2. 矩阵
  3. 以上全部

答案: d)

解释:多维数组可以被视为数组的数组。多维数组通常被视为网格、表格或矩阵。