#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 1024
typedef struct {
int i,j;
int e;
}Triple;
typedef struct {
Triple data[MAXSIZE+1];
int mu,nu,tu; //矩阵的行数、列数和非0元个数
}TSMatrix;
void CreatSMatrix(TSMatrix *M)
{
int row,col;
int t,k,sum;
printf("输入矩阵的行数列数和非零元的个数\n");
scanf("%d%d%d",&t,&k,&sum);
(*M).mu = t; (*M).nu = k; (*M).tu = sum;
for(t=0;t<sum;t++)
{
scanf("%d%d%d",&row,&col,&k);
(*M).data[t].i = row;
(*M).data[t].j = col;
(*M).data[t].e = k;
}
}
void PrintSMatrix(TSMatrix M)
{
int t,k;
int p=0;
printf("\n");
for(t=0;t<M.mu;t++)
{
for(k=0;k<M.nu;k++)
{
if(t == (M.data[p].i-1) && k == (M.data[p].j-1))
{
printf("%d ",M.data[p].e);
p++;
}
else
printf("0 ");
}
printf("\n");
}
printf("\n");
}
int TransposeSMatrix(TSMatrix M,TSMatrix *T)
{
int p,q,col;
(*T).mu = M.mu;
(*T).nu = M.nu;
(*T).tu = M.tu;
if((*T).tu)
{
q = 0;
for(col = 1;col <= M.nu;col++)
for(p = 0;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 1;
}
int FastTransposeSMatrix(const TSMatrix *M,TSMatrix *T){
int col,t,p,q,*num,*cpot;
T->mu=M->nu; T->nu=M->mu; T->tu=M->tu;
if(T->tu){
num=(int *)malloc(sizeof(int)*M->tu);
cpot=(int *)malloc(sizeof(int)*M->tu);
if(!(num&&cpot)){
printf("error.\n");
exit(0);
}
for(col=0;col<M->nu;col++) num[col]=0;
for(t=0;t<M->tu;t++) ++num[M->data[t].j - 1];
cpot[0]=0;
for(col=1;col<M->nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=0;p<M->tu;p++)
{
col=M->data[p].j; q=cpot[col - 1];
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 - 1];
}
}
return 1;
}
int main()
{
TSMatrix M,T;
CreatSMatrix(&M);
PrintSMatrix(M);
FastTransposeSMatrix(&M,&T);
PrintSMatrix(T);
return 0;
}
一步一步复习数据结构和算法基础-稀疏矩阵基本操作
最新推荐文章于 2022-08-14 18:56:05 发布