数组是所有高级编程语言中都已实现的固有数据类型,因此凡学习过高级程序设计语言的读者对数组都不陌生。但它和其它诸如整数、实数等原子类型不同,它是一种结构类型。换句话说,"数组"是一种数据结构。
 
     
   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语言的限定。在一般情况下,数组每一维的下标 的取值范围均可设置为任意值的整数。