(1)设m*n 矩阵中有t 个非零元素且t远小于m*n,这样的矩阵称为稀疏矩阵。很多科学管理及工程计算中,常会遇到阶数很高的大型稀疏矩阵。如果按常规分配方法,顺序分配在计算机内,那将是相当浪费内存的。为此提出另外一种存储方法,仅仅存放非零元素。但对于这类矩阵,通常零元素分布没有规律,为了能找到相应的元素,所以仅存储非零元素的值是不够的,还要记下它所在的行和列。于是采取如下方法:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。
将三元组按行优先的顺序,同一行中列号从小到大的规律排列成一个线性表,称为三元组表,采用顺序存储方法存储该表。如下图:
可以将其改写成如下的三元组的形式,同时存储器行、列和值,如下:
i |
j |
v |
1 |
2 |
12 |
1 |
3 |
9 |
3 |
1 |
-3 |
3 |
6 |
14 |
4 |
3 |
24 |
5 |
2 |
18 |
6 |
1 |
15 |
6 |
4 |
-7 |
对应的三元组的数据结构可以写成如下形式的数据结构:
//定义三元组的数据结构类型 typedef struct{ int i,j; //非零元素的行和列 ElemType e; //非零元素的值 }Triple; //三元组表的存储类型 typedef struct{ int mu,nu,tu; //矩阵的行、列以及非零元的个数 Triple data[MAXSIZE+1]; //三元组表 }Matrix;
(2)、矩阵的转置
要做到转置要做到三点
①、将矩阵的行列值互换
②、将每个三元组的i、j互换
③、重新排列三元组
如下图:
方法一:
①、将矩阵A的行列转化为矩阵B的列和行
②、一次遍历三元组的每一列的值
时间: 2024-10-21 02:54:15