数组可以看成线性表的推广,其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型
在扩展Basic、Pascal、Java和C语言中用的都是以行序为主序的存储结果,而在FORTRAN语言中,用的是以序列为主序的存储结构
特殊矩阵的压缩存储
1、对称矩阵
n阶对称矩阵满足:=
1<=i,j<=n
可以将个元压缩存储在n(n+1)/2个元的空间中
可以以/行序为主序存储其下三角(包括对角线中的元)
若令k为数组下表 k=i(i-1)/2+j-1 (i>=j 按行 下三角) (等差数列求和)
或 k=j(j-1)/2+i-1 (i<j 按列 上三角)
2、三角矩阵
上三角矩阵:矩阵下三角(不包括对角线)中元素均为常数c或0的n阶矩
k=(i-1)(2n-i+2)/2+(j-i) i<=j
第i行个数:n-i+1
第i-1行:n-(i-1)+1=n-i+2
下三角矩阵:矩阵上三角(不包括对角线)中元素均为常数c或0的n阶矩
3、多对角矩阵
非0元都集中在以对角线为中心的带状区域中
三对角矩阵:
需3n-2
k=2*i+j-3
4、稀疏矩阵
行列值构成三元组(i,j,v)来存,最后还存总行数,总列数,总个数
练习
1、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为
33
2、设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()
BA+180
3、对于 C 语言的二维数组 int A[m][n],每个元素占 2 个字节,数组中元素 a[i,j]的存储位置可由( )式确定。
Loc[i, j]=Loc[0, 0]+ (n×i+j)×2
4、数组 A[0..5, 0..6] 的每个元素占 5 个字节,将其按列优先次序存储在起始地址为 1000 的内存单元中,则元素 A[5, 5] 的地址是( )。
1175
5、数组 A[0..6, 0..5] 的每个元素占 5 个字节,将其按列优先次序存储在起始地址为 1000 的内存单元中,则元素 A[5, 5] 的地址是( )。
1200
6、数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放的存储器内,该数组按列存放,元素A[5][8]的起始地址为( )。
BA+180
7、在一个二维数组A中,假设每个数组元素的长度为3个存储单元,行下标为0~8,列下标为0~9,从首地址SA开始连续存放。在这种情况下,元素A[8][5]的起始地址为( )
SA+255
8、有一个n×n的对称矩阵A,将其下三角部分按行存放在一维数组B中,而A[0][0]存放于B[0]中,则第i+1行的对角元素A[i][i]存放于B中()
(i+3)i/2 i(i+1)/2+i=(i+3)i/2
9、设有一个12×12的对称矩阵M,将其上三角部分的元素mi,j(1≤i≤j≤12)按行优先存入C语言的一维数组N中,元素m6,6在N中的下标是( )
50
10、将一个10×10对称矩阵M的上三角部分的元素mi,j(1≤i≤j≤10)按列优先存入C语言的一维数组N中,元素m7,2在N中下标是( )
22
11、有一个100阶的三对角矩阵M,其元素mi,j(1≤i,j≤100)按行优先依次压缩存入标从0开始的一维数组中N。元素m30,30在N中的下标是( )
87
12、将三对角矩阵A[1...100][1...100]按行优先存入一维数组B[1...298]中,A中元素A[66][65]在数组B中的位置是( )
195
13、对n阶对称矩阵压缩存储时,需要表长为( )的顺序表。
n(n+1)/2
14、若将n阶上三角矩阵A按列优先级压缩存放在一维数组 B[1...n(n+1)/2+1]中,则存放到B[k]中的非零元素ai,j(1≤i,j≤n)的下标i、j与k的对应关系是( )
j(j-1)/2+i
15、若将n阶下三角矩阵A按列优先顺序压缩存放在一维数组 B[1..n(n+1)/2+1]中,则存放到B[k]中的非零元素ai,j(1≤i,j≤n)的下标j与k的对应关系是( )
(j-1)(2n-j+2)/2+i-j+1