作者:解学武
数组是什么,数据结构中的数组
提到数组,大家首先会想到的是:很多编程语言中都提供有数组这种数据类型,比如 C/C++、Java、Go、C# 等。但本节我要讲解的不是作为数据类型的数组,而是数据结构中提供的一种叫数组的存储结构。
在前面章节中,大家已经学会了很多种线性存储结构,包括顺序表、链表、栈、队列和串。数组也是一种线性存储结构,用来存储逻辑关系为 "一对一" 的数据。
和前面学过的那些线性存储结构相比,数组最大的不同是:它存储的数据可以包含多种“一对一”的逻辑关系。举个简单的例子:
![包含多种线性关系的数据](/uploads/allimg/240114/125G51945-0.gif)
图 1 包含多种线性关系的数据
上图中,{a1, a2, a3, a4}、{b1, b2, b3, b4}、{c1, c2, c3, c4}、{d1, d2, d3, d4} 中各自包含的元素具有“一对一”的逻辑关系,同时 a、b、c、d 这 4 个序列也具有“一对一”的逻辑关系。
类似图 1 这样,存储不止一种“一对一”逻辑关系的数据,数据结构就推荐使用数组存储结构。
实际场景中,存储具有 N 种“一对一”逻辑关系的数据,通常会建立 N 维数组:
数组存储结构还具有一些其它的特性,包括:
基于第 3 条特性,数组存储结构通常用顺序表来实现,而不用链表。有关顺序表实现数组结构,我会在下一节给大家详细讲解。
声明:当前文章为本站“玩转C语言和数据结构”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
在前面章节中,大家已经学会了很多种线性存储结构,包括顺序表、链表、栈、队列和串。数组也是一种线性存储结构,用来存储逻辑关系为 "一对一" 的数据。
和前面学过的那些线性存储结构相比,数组最大的不同是:它存储的数据可以包含多种“一对一”的逻辑关系。举个简单的例子:
![包含多种线性关系的数据](/uploads/allimg/240114/125G51945-0.gif)
图 1 包含多种线性关系的数据
上图中,{a1, a2, a3, a4}、{b1, b2, b3, b4}、{c1, c2, c3, c4}、{d1, d2, d3, d4} 中各自包含的元素具有“一对一”的逻辑关系,同时 a、b、c、d 这 4 个序列也具有“一对一”的逻辑关系。
类似图 1 这样,存储不止一种“一对一”逻辑关系的数据,数据结构就推荐使用数组存储结构。
数据结构中的数组
对于数组存储结构,我们可以这样理解它:数组是对线性表的扩展,是一种“特殊”的线性存储结构,用来存储具有多种“一对一”逻辑关系的数据。实际场景中,存储具有 N 种“一对一”逻辑关系的数据,通常会建立 N 维数组:
-
一维数组和其它线性存储结构很类似,用来存储只有一种“一对一”逻辑关系的数据:
图 2 一维数组存储结构示意图
-
二维数组用来存储包含两种“一对一”逻辑关系的数据。二维数组可以看作是存储一维数组的一维数组,如图 3 所示;
图 3 二维数组存储结构示意图
- n 维数组用来存储包含 n 种“一对一”逻辑关系的数据,可以看作是存储 n-1 维数组的一维数组;
数组存储结构还具有一些其它的特性,包括:
- 无论数组的维度是多少,数组中的数据类型都必须一致;
- 数组一旦建立,它的维度将不再改变;
- 数组存储结构不会对内部的元素做插入和删除操作,常见的操作有 4 种,分别是初始化数组、销毁数组、取数组中的元素和修改数组中的元素。
基于第 3 条特性,数组存储结构通常用顺序表来实现,而不用链表。有关顺序表实现数组结构,我会在下一节给大家详细讲解。
声明:当前文章为本站“玩转C语言和数据结构”官方原创,由国家机构和地方版权局所签发的权威证书所保护。