C语言稀疏矩阵一次定位快速转置算法
#include <stdlib.h>
#include<stdio.h>
#define MAXSIZE 1000
typedef struct{
int row;
int col;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE - 1];
int m;
int n;
int len;
}TSMatrix;
void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B){
int col,t,p,q;
int num[MAXSIZE];
int position[MAXSIZE];
B->m = A.n;
B->n = A.m;
B->len = A.len;
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++){
position[col] = position[col-1]+num[col-1];
}
for(p = 1;p<=A.len;p++){
col = A.data[p].col;
q = position[col];
B->data[q].row = A.data[p].col;
B->data[q].col = A.data[p].row;
B->data[q].e = A.data[p].e;
position[col]++;
}
}
}
int main(){
TSMatrix A;
TSMatrix B;
A.m = 6;
A.n = 5;
A.len = 7;
A.data[1].row = 1;
A.data[1].col = 1;
A.data[1].e = 3;
A.data[2].row = 1;
A.data[2].col = 4;
A.data[2].e = 5;
A.data[3].row = 2;
A.data[3].col = 3;
A.data[3].e = -2;
A.data[4].row = 3;
A.data[4].col = 1;
A.data[4].e = 1;
A.data[5].row = 3;
A.data[5].col = 3;
A.data[5].e = 4;
A.data[6].row = 3;
A.data[6].col = 5;
A.data[6].e = 6;
A.data[7].row = 5;
A.data[7].col = 3;
A.data[7].e = -1;
printf("before reverse...........\n");
for(int i = 1;i<=A.len;i++){
printf("row: %d colume: %d value: %d\n",A.data[i].row,A.data[i].col,A.data[i].e);
}
printf("\n");
FastTransposeTSMatrix(A,&B);
printf("after reverse............\n");
for(int i = 1;i<=B.len;i++){
printf("row: %d colume: %d value: %d\n",B.data[i].row,B.data[i].col,B.data[i].e);
}
return 0;
}