# Define Max size 12500
Typedef struct {
Int S;
Char B;
} Elemtype;
Typedef struct {
Int I, J;
Elemtype E;
} Tripe;
Typedef struct {
Int Mu, nu, Tu; // number of rows and non-zero elements
Tripe data [maxsize + 1];
} Tsmatrix;
// General sparse matrix transpose algorithm.
Int transposesmatrix (tsmatrix & T, tsmatrix & M ){
T. MU = M. Nu; T. Nu = M. Mu; T. Tu = M. Tu;
Int Col;
Int p, q = 1;
If (T. Tu ){
For (COL = 1; Col <= M. Nu; Col ++ ){
For (P = 1; P <= M. Tu; P ++ ){
If (M. Data [p]. j = 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;
Q ++;
}
}
}
Return 0;
}
Return 1;
}
// Improved sparse matrix transpose Algorithm
Int transposesmatrix (tsmatrix & T, tsmatrix & M ){
Int num [maxsize];
Int cpot [maxsize];
Int Col = 1, P;
T. Tu = M. Tu;
T. MU = M. Nu;
T. Nu = M. Mu;
For (COL = 1; Col <= M. Nu; Col ++) num [col] = 0;
For (P = 1; P <= T. Tu; P ++)
+ Num [M. Data [p]. J]; // obtain the total number of non-zero elements in each column.
Cpot [1] = 1;
For (COL = 2; Col <= M. Nu; Col ++)
Cpot [col] = cpot [col-1] + num [col-1]; // obtain the position of the first non-zero element in each column.
For (P = 1; P <= T. Nu; P ++ ){
Col = M. Data [p]. J;
T. Data [cpot [col]. E = M. Data [p]. E;
T. Data [cpot [col]. I = Col;
T. Data [cpot [col]. j = M. Data [p]. I;
Cpot [col] ++;
}
Return 0;
}
Sparse Matrix of Data Structure