
代码演示:
#include<stdio.h>
#include<stdlib.h>
#define MAX 12
typedef int datatype;
typedef struct{
int i, j;
datatype v;
} node;
typedef struct{
int m, n, t;
node data[MAX];
}spMatrix;
spMatrix *Create();
spMatrix *TransMat(spMatrix *a);
void Output(spMatrix *a);
int main(){
printf("输入行列数:\n");
spMatrix *a = Create();
spMatrix *b = TransMat(a);
printf("原矩阵:\n");
Output(a);
printf("转置矩阵:\n");
Output(b);
return 0;
}
spMatrix *Create(){
int m , n , k = 0, t = 0;
scanf("%d%d",&m,&n);
datatype element;
spMatrix *matrix;
matrix = (spMatrix *)malloc(sizeof(spMatrix));
matrix->m = m;
matrix->n = n;
printf("输入%d行,%d列元素:\n",m,n);
while (k < m*n){
scanf("%d", &element);
if (element != 0){
matrix->data[t].i = k / n;
matrix->data[t].j = k % n;
matrix->data[t].v = element;
t++;
}
k++;
}
matrix->t = t;
return matrix;
}
spMatrix *TransMat(spMatrix *a){
int p, q, bno = 0;
spMatrix *b;
b = (spMatrix *)malloc(sizeof(spMatrix));
b->m = a->n;
b->n = a->m;
b->t = 0;
if (a->t == 0)
return b;
for (p = 0; p < a->n; p++)
for (q = 0; q < a->t; q++)
if (a->data[q].j == p){
b->data[bno].i = a->data[q].j;
b->data[bno].j = a->data[q].i;
b->data[bno].v = a->data[q].v;
bno++;
}
b->t = bno;
return b;
}
void Output(spMatrix *a){
int i = 0, j = 0, k = 0;
for (i = 0; i < a->m; i++){
for (j = 0; j < a->n; j++){
if (i == a->data[k].i && j == a->data[k].j){
printf("%d ", a->data[k].v);
k++;
}
else
printf("%d ", 0);
}
printf("\n");
}
}
效果展示:
