#include<stdio.h>#include<stdlib.h>#define MAXSIZE 12500 //假设非零元个数的最大值为12500typedefintElemType;typedefstruct{introw,col;/* 元素所在的行、列号 */ElemTypee;/* 非零数据元素 */}Triple;typedefstruct{Tripledata[MAXSIZE+1];/* 使用数组存储每一个非零元的三元组 */intmu,nu,tu;/* nu, mu 为矩阵的行、列数,tu 为非零元的个数 */}TSMatrix;voidTransposeMatrix(TSMatrixA,TSMatrix*B)/* A 是稀疏矩阵的三元组形式,B 是存放 A 的转置矩阵的三元组数组 */{inti,j,k;B->mu=A.nu;// 将矩阵 A 的行数赋值给矩阵 B 的列数B->nu=A.mu;// 将矩阵 A 的列数赋值给矩阵 B 的行数B->tu=A.tu;// 将矩阵 A 的非零元素个数赋值给矩阵 B 的非零元素个数if(B->tu>0){// 首先检查矩阵 B 的非零元素个数是否大于零j=1;// 在转置操作中,首先用变量 j 初始化为1,表示目前存储到矩阵 B 的第一个非零元素。// 然后,通过 for 循环遍历矩阵 B 的每一列(k 表示当前列的索引)。for(k=1;k<=A.nu;k++){// 对于 A 中的每一列for(i=1;i<=A.tu;i++){// 在 A 中找到对应列的非零元素// 在每一列的循环内部,通过嵌套的 for 循环遍历矩阵 A 中的非零元素。// 检查矩阵 A 中当前元素的列号是否等于当前列索引 k。if(A.data[i].col==k){// 如果该非零元素的列号与当前列相同,说明该非零元素需要被转置到矩阵 B 中的当前列。// 将该非零元素的行号赋值给矩阵 B 中的当前元素的行号// 将该非零元素的值赋值给矩阵 B 中的当前元素的值B->data[j].row=A.data[i].col;B->data[j].col=A.data[i].row;B->data[j].e=A.data[i].e;j++;// 将非零元素存入 B,并增加 B 中非零元素的计数// 并将索引 j 增加1,指向下一个要存储的非零元素}}}}}intmain(){TSMatrixA,B;// 初始化稀疏矩阵 AA.mu=3;// 行数A.nu=4;// 列数A.tu=4;// 非零元个数A.data[1].row=1;A.data[1].col=1;A.data[1].e=3;A.data[2].row=2;A.data[2].col=2;A.data[2].e=7;A.data[3].row=2;A.data[3].col=4;A.data[3].e=9;A.data[4].row=3;A.data[4].col=4;A.data[4].e=5;// 转置矩阵 A,并将结果存储在矩阵 B 中TransposeMatrix(A,&B);// 输出转置后的矩阵 Bprintf("转置后的矩阵 B:\n");for(inti=1;i<=B.tu;i++){printf("(%d, %d, %d) \n",B.data[i].row,B.data[i].col,B.data[i].e);}printf("\n");return0;}