3、...jN,aj1,...,ji+1,...,jN>
4、0≤jk≤bk-1,1≤k≤n且k<>i,0≤ji≤bi-2,aj1,...,ji,...,jn,aj1,...ji+1,...,jn∈D,i=2,...,n}5.1数组的定义基本操作:InitArray(&A,n,bound1,...,boundn)操作结果:若维数n和各维长度合法,则构造相应的数组A。DestroyArray(&A)初始条件:数组A已经存在。操作结果:销毁数组A。Value(A,&e,index1,...,indexn)初始条件:A是n
5、维数组,e为元素变量,随后是n个下标值。操作结果:若各下标不超界,则e赋值为所指定的A的元素值,并返回OK。Assign(&A,e,index1,...,indexn)初始条件:A是n维数组,e为元素变量,随后是n个下标值。操作结果:若下标不超界,则将e的值赋给A中指定下标的元素。}ADTArray5.2数组的顺序表示和实现由于数组类型不作插入和删除的操作,因此只需要通过"顺序映象"得到它的存储结构,即借助数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。通常有两种映象方法:即“以行(序)为主(序)“row
6、-major的映象方法和”以列(序)为主(序)“column-major的映象方法。将多维数组映射到一维数组的方法representationsofamultidimensionalarray5.2数组的顺序表示和实现以二维数组a[m,n]为例,其在内存中的映像既可以如下排列(行优先):a00,a01,…,a0,n-1,a10,a11,…,a1,n-1,…am-1,0,…am-1,n-1也可以如下排列(列优先):a00,a10,…,am-1,0,a01,a11,…,am-1,1,…a0,n-1,…am-1,n-11
7、112131415162122232425263132333435364142434445461112131415162122232425263132333435364142434445461121314112223242132333431424344415253545162636465.2数组的顺序表示和实现假设二维数组R[m][n]中每个数据元素占L个存储地址,并以LOC(i,j)表示下标为(i,j)的数据元素的存储地址,则该数组中任何一对下标(i,j)对应的数据元素在"以行为主"的顺序映象中的存储地址为:LO
8、C(i,j)=LOC(0,0)+(i*n+j)*L在"以列为主"的顺序映象中的存储地址为:LOC(i,j)=LOC(0,0)+(j*m+i)*L其中LOC(0,0)是二维数组中第一个数据元素(下标为(0,0))的存储地址,称为数组的"基地址"或"基址"。5.2数组的顺序表示和实现类似地,假设三维数组R[p][m][n]中每个数据元素占L个存储地址,并以LOC(i,j,k)表示下标为(i,j,k)的数据元素的存储地址,则该数组中任何一对下标(i,j,k)对应的数据元素在"以行为主"的顺序映象中的存储地址为:LOC(i
9、,j,k)=LOC(0,0,0)+(i×m×n+j×n+k)×L5.2数组的顺序表示和实现templateclassArray1D{friendostream&operator<<(ostream&,constArray1D&);public:Array1D(intsize=0);Array1D(constArray1D&v);//copyconstructor~Array1D(){delete[]element;}T&operator[](inti)const;intSize(){r
10、eturnsize;}Array1D&operator=(constArray1D&v);Array1Doperator+()const;//unary+Array1Doperator+(constArray1D&v)const;Array1Doperator-()const;//unaryminusArray1Do