图 1 矩阵转置示意图
图 2 三元组表的变化
图 2a) 表示的是图 1 中转置之前矩阵的三元组表,2b) 表示的是图 1 中矩阵转置后对应的三元组表。
不仅如此,如果矩阵的行数和列数不等,也需要将它们互换。此 3 步中,前两步比较简单,关键在于最后一步的实现。本节先介绍较容易的一种。
图 3 矩阵转置的第一个过程
图 4 矩阵转置的第二个过程
#include<stdio.h> #define number 10 typedef struct { int i, j; int data; }triple; typedef struct { triple data[10]; int n, m, num; }TSMatrix; TSMatrix transposeMatrix(TSMatrix M, TSMatrix T) { T.m = M.n; T.n = M.m; T.num = M.num; if (T.num) { int q = 0; for (int col = 1; col <= M.m; col++) { for (int p = 0; p < M.num; 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].data = M.data[p].data; q++; } } } } return T; } int main() { TSMatrix M; M.m = 2; M.n = 3; M.num = 4; M.data[0].i = 1; M.data[0].j = 2; M.data[0].data = 1; M.data[1].i = 2; M.data[1].j = 2; M.data[1].data = 3; M.data[2].i = 3; M.data[2].j = 1; M.data[2].data = 6; M.data[3].i = 3; M.data[3].j = 2; M.data[3].data = 5; TSMatrix T; for (int k = 0; k < number; k++) { T.data[k].i = 0; T.data[k].j = 0; T.data[k].data = 0; } T = transposeMatrix(M, T); for (int i = 0; i < T.num; i++) { printf("(%d,%d,%d)\n", T.data[i].i, T.data[i].j, T.data[i].data); } return 0; }程序运行结果为:
(1,3,6)
(2,1,1)
(2,2,3)
(2,3,5)
O(n2)
。
本文链接:http://task.lmcjl.com/news/16987.html