C语言数据结构——数组的定义与顺序存储

数组的定义:
数组A为n(n>0)个元素的有穷序列,记作
A =(a1,…,an)
ai(1≤i≤n)或者全部为相同数据类型的原子项ei(即,具体数值);或者全部为具有相同定义的数组Bi。
数组A =(a1,…,an)的维度(Dim)递归定义为:
C语言数据结构——数组的定义与顺序存储
数组在定义时只需要给出每个维度的长度或者范围即可。
在C语言中,定义N维数组除了要给出数据类型和数组名,还要依次给出数组每一位的长度L1,L2直到Ln。其中,L1为第一维的长度。
C语言数据结构——数组的定义与顺序存储
例子如下:
C语言数据结构——数组的定义与顺序存储
C语言数据结构——数组的定义与顺序存储
C语言数据结构——数组的定义与顺序存储
数组的顺序存储:
由于数组中各元素定义完全相同,将数组元素保存到内存中时,首选顺序存储。
但由于多维数组数据元素之间是复杂的多维关系,需要解决多维数据空间到一维数据空间的映射问题。
核心问题:数组元素多维结构到一维内存空间的映射
数组A = (a1,…,an)顺序存储方案的递归定义:
递归基础:ai为原子项ei
C语言数据结构——数组的定义与顺序存储

递归条件:ai为数组Bi
C语言数据结构——数组的定义与顺序存储
例子如下:
C语言数据结构——数组的定义与顺序存储
数组的基本操作:
C语言数据结构——数组的定义与顺序存储
操作特点:
以数组元素的读取和写入为主;
一般不在数组中插入和删除数据元素;
支持使用下标(元素在各位数组中的位置序号)对数组元素进行随机访问。
数组的随机访问——低下标优先
若知道a1的地址,每个原子项为size字节,则an的地址为:
Loc(an) = Loc(a1)+(n-1)✖size(一维数组)
Loc(an,m) = Loc(a1,1)+(n-1)✖size+(m-1)✖size(二维数组)
例子如下:
C语言数据结构——数组的定义与顺序存储
知识总结:
数组特点:
数据元素亦为相同结构数组;
数据元素宏观为线性关系。
顺序存储方案:
可表达数组的递归结构,并体现数据元素之间的关系;
实现了数据元素多维关系到一维内存的映射;
通过下标可以随机访问数组元素。