三十儿立云翔迅雷:编程求一个15×15浮点稀疏矩阵的转置矩阵

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 07:01:03
要求:1、矩阵非零元素不少于16个
2、用户从文件中读入矩阵
3、使用链式存储

请见维基百科全书
链式存储,转置矩阵
从文件中读入容易,自己写吧。主要东西在:

http://zh.wikipedia.org/wiki/%E7%A8%80%E7%96%8F%E7%9F%A9%E9%98%B5

void TransposeSMatrix(RLSMatrix M,RLSMatrix *T)
{ /* 求稀疏矩阵M的转置矩阵T */
int p,q,t,col,*num;
num=(int *)malloc((M.nu+1)*sizeof(int));
(*T).mu=M.nu;
(*T).nu=M.mu;
(*T).tu=M.tu;
if((*T).tu)
{
for(col=1;col<=M.nu;++col)
num[col]=0; /* 设初值 */
for(t=1;t<=M.tu;++t) /* 求M中每一列非零元个数 */
++num[M.data[t].j];
(*T).rpos[1]=1;
for(col=2;col<=M.nu;++col) /* 求M中第col中第一个非零元在T.data中的序号 */
(*T).rpos[col]=(*T).rpos[col-1]+num[col-1];
for(col=1;col<=M.nu;++col)
num[col]=(*T).rpos[col];
for(p=1;p<=M.tu;++p)
{
col=M.data[p].j;
q=num[col];
(*T).data[q].i=M.data[p].j;
(*T).data[q].j=M.data[p].i;
(*T).data[q].e=M.data[p].e;
++num[col];
}
}
free(num);
}