C語言資料結構——稀疏矩陣的快速轉置
阿新 • • 發佈:2019-02-09
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#define OK 1
#define MAXSIZE 12500
typedef int Status;
typedef struct
{
int i;
int j;
int e;
}Triple;
typedef struct
{
int mu;
int nu;
int tu;
Triple data[MAXSIZE+1];
}TSMatrix;
Status FastTransposeSMarix(TSMatrix M,TSMatrix &T)
{
int col,t,p,q;
char num[200],cpot[200];
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
if(T.tu)
{
for(col=1;col<=M.tu;++col)
num[col]=0;
for(t=1;t<=M.tu;++t)
++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.tu;++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];
}
}
return OK;
}
int main()
{
TSMatrix M;
TSMatrix T;
int p,q;
printf("輸入原矩陣的行、列和非零元個數:");
scanf("%d %d %d",&M.mu,&M.nu,&M.tu);
printf("\n");
for(p=1;p<=M.tu;++p)
{
printf("輸入原矩陣的行、列和非零元的值:\n");
scanf("%d,%d,%d",&M.data[p].i,&M.data[p].j,&M.data[p].e);
}
printf("\n");
FastTransposeSMarix(M,T);
printf("輸出轉置後的矩陣的行、列和非零元個數:%d %d,%d\n",T.mu,T.nu,T.tu);
for(q=1;q<=T.tu;++q)
printf("輸出轉置後的行、列和非零元的值:%d,%d,%d\n",T.data[q].i,T.data[q].j,T.data[q].e);
return OK;
}