//基于矩陣的三元組表示,將矩陣A轉置為矩陣B
FastTransposeTSMatrix(TSMatrix A,TSMatrix *B)
{
int col,t,p,q;
int num[MAXSIZE],position[MAXSIZE];
B->len=A.len;B-N=A.m;B->m=A.n;
if(B->len)
{
for(col=1;col<=A.n;col++)
num[col]=0;
for(t=1;t<=A.len;t++)
num[A.data[t].col]++; //采用數組下表計數法計算每一列的非零元素個數
position[1]=1;
for(col=2;col<=A.n;col++) //求col列中第一個非零元素在B.data[ ]中的正確位置
position[col]=position[col-1]+num[col-1];
for(p=1;p<=A.len;p++) //將表A從頭至尾掃描一次,實現矩陣轉置
{
col=A.data[p].col;q=position[col];
B->data[q].row=A.data[p].col; //1
B->data[q].col=A.data[p].row; //2
B->data[q].e=A.data[p].e; //3 1、2、3為行列互換,元素賦值
position[col]++; //指向下一個列號為col的非零元素在表B中的存放位置
}
}
}