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 Dim 8 typedef structi ElemType"base, int dim: int *bounds. 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 矩阵的压缩存储 矩阵一般可用二维数组实现,特殊矩阵采用压缩存储。 压缩存储:为多个值相同的元只分配一个存储空间, 对零元不分配空间。 特殊矩阵:值相同的元素或者零元素在矩阵中的分布 有一定规律 稀疏矩阵:非零元较零元少,且分布没有一定规律的 矩阵
5.3.1.特殊矩阵 0对称矩阵:aj=可1 <i,jsn 口压缩存储方法:为每一对对称元分配一个存储空间 g将下三角的元素,按行存储到一维数组sa中 0共有n(m+1)2个存储单元, 0=副在一维数组中的位置k为:W12+-1当否则J-1)2+-1 角矩阵:上(下)三角中的元均为常数c或0 压缩存储方法:同上,只存储上(下)三角元素。 下三角:k=(-1)2+j-1 口上三角:ke=(2n-)(1-1)2÷1(按行) k=jU-1)2+-1(按列) 0注意:k从零开始,L从1开始 °殲矩阵:所有非零元都集中在以主对角线为中心的带状区 压缩方法:压缩存储到一维数组sa[]中,三对角矩阵有3n2个 元素。 口k=2H3
5.3.1. 特殊矩阵 对称矩阵: aij=aji 1≤i,j≤n 压缩存储方法:为每一对对称元分配一个存储空间 将下三角的元素,按行存储到一维数组sa中 共有n(n+1)/2个存储单元, aij在一维数组中的位置k为:i(i-1)/2+j-1 当i>=j 否则 j(j-1)/2+i-1 三角矩阵: 上(下)三角中的元均为常数c或0 压缩存储方法:同上,只存储上(下)三角元素。 下三角:k=i*(i-1)/2+j-1 上三角:k=(2n-i)(i-1)/2+j-1 (按行) k=j(j-1)/2+i-1 (按列) 注意:k从零开始,i,j从1开始 对角矩阵:所有非零元都集中在以主对角线为中心的带状区 域中。 压缩方法:压缩存储到一维数组sa[ ]中,三对角矩阵有3n-2个 元素。 k=2*i+j-3