C语言三元组顺序表爱吃窝窝头2023-11-302023-11-30//2022.10.11#include <stdio.h>#include <stdlib.h>#define N 20//定义三元组类型typedef struct triple{ int i,j;//行列下标 int e;//非零元的值}triple;//定义三元组顺序表的类型typedef struct TS{ triple data[N+1]; int mu,nu,tu;//行数,列数,非零元个数}TS;TS M,T;//定义一个三元组顺序表//三元组表的建立void creat(){ int r,c,x;M.tu=0;//行 列 值 下表 printf("请输入稀疏矩阵的行数和列数:"); scanf("%d%d",&M.mu,&M.nu); printf("请输入值:"); for(r=1;r<=M.mu;r++) for(c=1;c<=M.nu;c++) { scanf("%d",&x); if(x) { M.tu++; M.data[M.tu].i=r; M.data[M.tu].j=c; M.data[M.tu].e=x; } }}//转置三元组表void fasttrans(){ int num[N],cpot[N],col,p,q; T.nu=M.mu; T.mu=M.nu; T.tu=M.tu; if(T.tu) { for(col=1;col<=M.nu;col++) num[col]=0; for(p=1;p<=M.tu;p++) { col=M.data[p].j; num[col]++; } cpot[1]=1; for(col=2;col<=M.nu;col++) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p<=M.tu;p++) { col=M.data[p].j; q=cpot[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; cpot[col]++; } }}//输出void output(TS A){ int p; for(p=1;p<=A.tu;p++) printf("%3d%3d%3d\n",A.data[p].i,A.data[p].j,A.data[p].e );}void main(){ creat(); printf("输出转置前的:\n"); output(M); printf("输出转置后的:\n"); fasttrans(); output(T);}