数组是所有高级编程语言中都已实现的固有数据类型,因此凡学习过高级程序设计语言的读者对数组都不陌生。但它和其它诸如整数、实数等原子类型不同,它是一种结构类型。换句话说,"数组"是一种数据结构。 |
||||
5.1.1 数组的类型定义 ADT Array { 数据对象:D={aj1,j2,...,ji ,...jN | =0,...,-1, i=1,2,..,N, 称 N(>0) 为数组的维数, 为数组第 i 维的长度, 为数组元素的第i维下标,aj1,...,jN ∈ElemSet } 数据关系:R={R1, R2, ..., RN} Ri={<aj1 ,...ji ,...jN , aj1 ,...,ji+1,...,jN > | 0≤jk≤bk-1, 1≤k≤N 且ki, 0≤≤bi-2, aj ,...,j ,...,j , aj ,...j+1,...,j ∈D, i=2,...,N } |
这是一个C语言风格的
n 维数组的定义,数组中共有
...
个元素,每个元素都处在 n 个关系中,但因为每个关系本身都是"线性关系",所以数组也是线性结构。 看一个二维数组的简单情况。 D={|0≤i≤m-1,0≤j≤n-1, ElemType} R={ROW,COL} 其中: ROW={< ,>|i=1,…,m-2, 0≤j≤n-1, , ElemType} (称作"行关系") COL={< ,>|j=1,…,n-2, 0≤i≤m -1,, ElemType} (称作"列关系") 上述定义的二维数组中共有 mn 个元素,每个元素 同时处于"行"和"列"的两个关系中,它既在"行关系ROW"中是(i>0)的后继,又在"列关系COL"中是(j>0)的后继。 和线性表类似,数组中的每个元素都对应于一组下标(j1,j2,…jN),每个下标的取值范围是0≤≤,称 为第 i 维的长度(i=1,2,…,N)。因此,也可以将数组看成是由"一组下标"和"元素值"构成的二元组的集合。需要注意的是,在此给出的数组定义中,各维下标的下限均约定为常量 0,这只是C语言的限定。在一般情况下,数组每一维的下标 的取值范围均可设置为任意值的整数。 |