transmat.c

来自「《数据结构》教材源程序,可以让你轻松的根据教材学习数据结构」· C语言 代码 · 共 69 行

C
69
字号
typedef struct {
int  data[100][100];
int  m,n;  /*分别存放稀疏矩阵的行数、列数和非零元素的个数*/
 } matrix;
typedef  int  spmatrix[100][3];
void  compressmatrix(matrix A , spmatrix B) 
 {/*将稀疏矩阵A转换成其三元组表示B*/
    int i, j, k=1;
    for ( i=0; i<A.m; i++)
      for (j=0; j<A.n; j++)
         if (A.data[i][j] !=0)
           {  B[k][0]=i;
              B[k][1]=j;
              B[k][2]=A.data[i][j];
              k++;
            }
     B[0][0]=A.m;
     B[0][1]=A.n;
     B[0][2]=k-1;
}

void transpmatrix (spmatrix B, spmatrix C)
 {/*实现稀疏矩阵的转置*/
    int i, j, t, m, n;
    int x[100];
    int y[100];
    m=B[0][0]; n=B[0][1]; t=B[0][2];
    C[0][0]=n; C[0][1]=m; C[0][2]=t;
    if (t>0)
     {
       for (i=0; i<n; i++) x[i]=0;
       for (i=1; i<=t; i++) x[B[i][1]]=x[B[i][1]]+1;
       y[0]=1;
       for (i=1; i<n; i++) y[i]=y[i-1]+x[i-1];
       for (i=1; i<=t; i++)
         {
           j=y[B[i][1]];
           C[j][0]= B[i][1];
           C[j][1]= B[i][0];
           C[j][2]= B[i][2];
           y[B[i][1]]=j+1;
         }
    }
 }

main()
{ int i,j,m,n;
  matrix A;
  spmatrix B,C;
  scanf("%d%d",&m,&n);
  A.m=m; A.n=n;
  for ( i=0; i<m; i++)
      for (j=0; j<n; j++)
         scanf("%d",&A.data[i][j]);
  compressmatrix(A,B);
  for ( i=0; i<=B[0][2]; i++)
      { printf("\n");
        for (j=0; j<3; j++)
           printf("%d",B[i][j]);
       }
  printf("-------");
  transpmatrix(B,C);
  for ( i=0; i<=C[0][2]; i++)
      { printf("\n");
        for (j=0; j<3; j++)
           printf("%d",C[i][j]);
       }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?