现在的位置: 首页 > 综合 > 正文

压缩矩阵的转置

2014年04月10日 ⁄ 综合 ⁄ 共 1973字 ⁄ 字号 评论关闭

#include <stdio.h>

#include <stdlib.h>

 

#define    T     100

 

typedef struct

{

       int i,j;

       int e;

}Date;

 

typedef struct

{

       Date date[T];

       int nu,mu,tu;

}sb;

 

void Printsb(sb M);

void Transfer1(sb M,sb *N);

void Transfer2(sb M,sb *N);

 

void main()

{

       sb M,N;

       int k;

       printf("请输入M的行数和列数以及非零元素的个数:\n");

       scanf("%d,%d,%d",&M.mu,&M.nu,&M.tu);

       printf("请输入M中各个元素:\n");

       for(k=0;k<M.tu;k++)

       {

              printf("请输入第%d个元素的行列序及其值:\n",k+1);

              scanf("%d,%d,%d",&M.date[k].i,&M.date[k].j,&M.date[k].e);

       }

       printf("\n您输入的压缩矩阵为:");

       Printsb(M);

       printf("第一种方法转置后为:");

       Transfer1(M,&N);

       Printsb(N);

       printf("第二种方法转置后为:");

       Transfer2(M,&N);

       Printsb(N);

}

 

void Printsb(sb M)

{

       int k;

       printf("\n\n-----------------\n");

       printf("|  i  |  j  |  e  |\n");

       for(k=0;k<M.tu;k++)

       {

              printf("|%5d|%5d|%5d|\n",M.date[k].i,M.date[k].j,M.date[k].e);

       }

              printf("-----------------\n\n");

}

 

void Transfer1(sb M,sb *N)

{

       int n,t,k=0;

 

       N->mu=M.nu;

       N->nu=M.mu;

       N->tu=M.tu;

      

       for(n=1;n<=N->mu;n++)

       {

              for(t=0;t<M.tu;t++)

              {

                     if(M.date[t].j==n)

                     {

                            N->date[k].i=M.date[t].j;

                            N->date[k].j=M.date[t].i;

                            N->date[k].e=M.date[t].e;

                            k++;      

                     }

              }

       }

}

 

void Transfer2(sb M,sb *N)

{

       int k,n,t,f;

       int num[T],copt[T];

 

       N->mu=M.nu;

       N->nu=M.mu;

       N->tu=M.tu;

 

       for(k=1;k<=M.nu;k++)

              num[k]=0;

 

       for(k=0;k<M.tu;k++)

              num[M.date[k].j]++;

 

       copt[1]=0;

 

       for(k=2;k<=M.nu;k++)

              copt[k]=copt[k-1]+num[k-1];

 

       for(n=0;n<M.tu;n++)

       {

              t=M.date[n].j;

              f=copt[t];

              N->date[f].i=M.date[n].j;

              N->date[f].j=M.date[n].i;

              N->date[f].e=M.date[n].e;

              copt[t]++;

       }

}

【上篇】
【下篇】

抱歉!评论已关闭.