三元组压缩
在之前的博客《数组的压缩存储》中提到过,对于一个稀疏矩阵我们可以采用三元组的方式来进行压缩,即存储行、列、数值信息这三元来代替一个二维数组。
之前博客的截图:

转置
将一个二维数组的每一个数据的行列信息对调得到的新矩阵就是原矩阵的转置。
如矩阵:
0 0 0 1
1 0 0 2
0 0 1 2
变成:
0 1 0
0 0 0
0 0 1
1 2 2
的过程就是求转置的过程。
- 转置矩阵的行列数和之前的列行数相同,则有可能后来的数组格式和之前不同,所以需要采用新的数组或者采用压缩存储方式来存储新的数组。
- 另外如果简单的把三元组中的行列数据调换,那么这个博客就失去了意义,因为原来的数据为有序的,所以我们在调换之后也要保证有序
(所谓的有序是指按行的顺序存储每一个结点)
方法一:循环查找
struct three
{
int col,row;
int data;
}
struct TSMatrix
{
struct three data[MAXNUM+1];
//maxnum是自己define的一个数值,表示这个数组最大有多少个非零元 ,+1则将第一个位置空出来
int c_num, r_num;//二维数组列数、行数
int number; //二维数组的非零元个数
}
struct TSMatrix Transpose(struct TSMatrix M)
{
struct TSMatrix T;
T.c_num = M.r_num;
T.r_num = M.c_num;
T.number=M.number;//初始化
if(T.number)
{
int p=1, q=1;
for(int col = 1; col <= M.c_num; col++)//按行来寻找
for(; p <= M.number; p++)//对每一个三元组
if(M.data[p].col == col)
{
T.data[q].row = M.data[p].col;
T.data[q

最低0.47元/天 解锁文章
1744

被折叠的 条评论
为什么被折叠?



