一步一步复习数据结构和算法基础-稀疏矩阵基本操作

来源:互联网 发布:mac解压rar免费 编辑:程序博客网 时间:2024/06/05 05:13
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 1024typedef 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++;}elseprintf("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;}