51数组的定义 ADT Array 数据对象D 具有相同类型的数据元素构成的有序集合。 数据关系R 对于n维数组,其每一个元素均位于n 个向量中,每个元素最多具有n个前驱结点 和n个后继结点
5.1 数组的定义 ADT Array{ 数据对象D: 具有相同类型的数据元素构成的有序集合。 数据关系R: 对于n维数组,其每一个元素均位于n 个向量中,每个元素最多具有n个前驱结点 和n个后继结点
基本操作: InitArray (&A,n, index1,-, index) 新建一个n维数组A,其每维的大小由 index1, index2, index确定。 DestroyArray (&A) 销毁数组A,收回其占用的空间。 Value(A, &x, index1, a,index) 取出A[ indexlltindex2] index数组元素的值存入变量x中。 Assign(&A, e, index1,a,index) 将表达式e的值赋给数组元素 A[index1index2…… index] JADT Array
基本操作: InitArray(&A,n,index1,…, indexn) 新建一个n维数组A,其每维的大小由index1,index2,……,indexn确定。 DestroyArray(&A) 销毁数组A,收回其占用的空间。 Value(A,&x,index1,…,indexn) 取出A[index1][index2]……[indexn]数组元素的值存入变量x中。 Assign(&A,e,index1,…,indexn) 将表达式e的值赋给数组元素A[index1][index2]……[indexn] }ADT Array
52数组的顺序表示 0多维数组用一维的存储单元存放需约定次序。 PASCALI和c语言是以行序为主序, FORTRAN以 列序为主序。 0给定维数和各维长度,数组的存储空间确定。 0二维数组中任一元素a的存储地址 aLoc()=Loc(0,0)+(b2+1+j)L n维数组:教材p93 Loc(j1j2,…jn)=Loc(0,0,…,0)+∑cj 口其中cnL,c1=bc1n
5.2 数组的顺序表示 多维数组用一维的存储单元存放需约定次序。 PASCAL和C语言是以行序为主序,FORTRAN以 列序为主序。 给定维数和各维长度,数组的存储空间确定。 二维数组中任一元素aij的存储地址: Loc(i,j)=Loc(0,0)+(b2*i+j)*L n维数组:教材p93 Loc(j1,j2,…,jn)=Loc(0,0,…,0)+ ∑ci j i 其中 cn=L, ci-1=bi *ci , 1<i≤n
类型定义 Include <stdarg.h> # define MAX ARRAY Din8∥数组维数最大值 typedef structI Elem Type * base;数组元素基址 int dim. ∥数组维数 int *bounds; J数组维界基址 int *constants ∥数组映象函数常量基址 ARray
类型定义 #include <stdarg.h> #define MAX_ARRAY_DIM 8 //数组维数最大值 typedef struct{ ElemType *base; //数组元素基址 int dim; //数组维数 int *bounds; //数组维界基址 int *constants; //数组映象函数常量基址 }Array;
53矩阵的压缩存储 0矩阵一般可用二维数组实现,特殊矩阵采用压缩存储。 0压缩存储:为多个值相同的元只分配一个存储空间, 对零元不分配空间。 0特殊矩阵:值相同的元素或者零元素在矩阵中的分布 有一定规律 0稀疏矩阵:非零元较零元少,且分布没有一定规律的 矩阵
5.3 矩阵的压缩存储 矩阵一般可用二维数组实现,特殊矩阵采用压缩存储。 压缩存储:为多个值相同的元只分配一个存储空间, 对零元不分配空间。 特殊矩阵:值相同的元素或者零元素在矩阵中的分布 有一定规律 稀疏矩阵:非零元较零元少,且分布没有一定规律的 矩阵