请分别写出不同数组的存储方式,并计算任意元素i的存储地址。 数组包括:正常二维矩阵,特殊二维矩阵(对称矩阵,三角矩阵,稀疏矩阵)
时间: 2024-05-31 20:14:08 浏览: 193
1. 正常二维矩阵的存储方式:
假设二维矩阵的行数为m,列数为n,元素类型为T,则可以使用一维数组来存储二维矩阵,具体的存储方式为:将二维矩阵的每一行依次存储在一维数组中,即将第一行的n个元素存储在数组中的前n个位置,第二行的n个元素存储在数组的第n+1到2n个位置,以此类推,直到第m行的n个元素存储在数组的(m-1)*n到m*n-1个位置。任意元素i的存储地址为:row * n + col,其中row为该元素所在行数,col为该元素所在列数。
2. 对称矩阵的存储方式:
对称矩阵的元素满足a[i][j]=a[j][i],因此可以只存储矩阵的一半元素。假设矩阵的行数为n,元素类型为T,则可以使用一维数组来存储对称矩阵,具体的存储方式为:将矩阵的第一行的n个元素存储在数组的前n个位置,第二行的n-1个元素存储在数组的第n到2n-2个位置,以此类推,直到第n行的1个元素存储在数组的(n-1)*n/2+n-1个位置。任意元素i的存储地址为:(i * (i-1) / 2 + j)(i>=j),或者(j * (j-1) / 2 + i)(i<j)。
3. 三角矩阵的存储方式:
三角矩阵的元素满足a[i][j]=0(i>j或i<j),因此可以只存储矩阵的一半元素。假设矩阵的行数为n,元素类型为T,则可以使用一维数组来存储三角矩阵,具体的存储方式为:将矩阵的第一行的n个元素存储在数组的前n个位置,第二行的n-1个元素存储在数组的第n到2n-2个位置,以此类推,直到第n行的1个元素存储在数组的(n-1)*n/2+n-1个位置。任意元素i的存储地址为:(i * (i-1) / 2 + j)(i>=j),或者(j * (j-1) / 2 + i)(i<j)。
4. 稀疏矩阵的存储方式:
稀疏矩阵中大部分元素为0,因此可以只存储非0元素的值和位置。假设矩阵的行数为m,列数为n,元素类型为T,则可以使用三个一维数组来存储稀疏矩阵:data数组存储非0元素的值,row数组存储非0元素的行数,col数组存储非0元素的列数。任意元素i的存储地址为:首先在row数组中查找该元素所在的行数,然后再在col数组中查找该元素所在的列数,最后在data数组中查找该元素的值。
阅读全文