正在加载图片...
元组数组存放的稀疏矩阵转置算法 #define n 50 行数和列数的最大值 void transmatrIX(MATRIX M, MATRIX T i int num[N=(O), rpos[NIp, q, col 计算转置后矩阵的各行的非零元素的个数 for(p=0; P<M tu p++)num M. datalp] j++ rpos[0]-=0;∥开始计算各行非零元素在数组中的起始位置 for(col=l; cok<M. nu, col++) rpos coll=rpos col-1+num col-1 T->mu=M. nu: T->nu=M. mu: T->tu=M.tu for(p=0; p<M tu p++) f col=M.datap] j q=rpos col 成为该单元在转置矩阵数组中的下标 T>data[qi= M. datalp]j,开始转置行列号 T->data ql j=M.datalp 1 T>data[q]e= M.datap]e;∥复制非零元素的值 rpos col l+t /*修正改行非零元素在三元数组中 下标,为存放下一个改行的非零元 素作准备* d//for三元组数组存放的稀疏矩阵转置算法 #define N 50 //行数和列数的最大值 void transmatrix(MATRIX M,MATRIX *T) { int num[N]={0},rpos[N],p,q,col; //计算转置后矩阵的各行的非零元素的个数 for(p=0;p<M.tu;p++)num[M.data[p].j]++; rpos[0]=0; //开始计算各行非零元素在数组中的起始位置 for(col=1;col<M.nu;col++) rpos[col]=rpos[col-1]+num[col-1]; T->mu=M.nu; T->nu=M.mu; T->tu=M.tu; for(p=0;p<M.tu;p++) { col=M.data[p].j; q=rpos[col]; //q成为该单元在转置矩阵数组中的下标 T->data[q].i=M.data[p].j; //开始转置行列号 T->data[q].j=M.data[p].i; T->data[q].e=M.data[p].e; //复制非零元素的值 rpos[col]++; /*修正改行非零元素在三元数组中 下标,为存放下一个改行的非零元 素作准备*/ }//for }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有