数据结构与算法 ~ 数组和广义表 ~ 稀疏矩阵的传统转置

数据结构与算法中数组和广义表的 稀疏矩阵的传统转置

#include<stdlib.h>
#include<stdio.h>
#define   MAXSIZE   100
typedef struct{
	int  row ,col ;/*该非零元的行下标和列下标*/
	int  data ;
} Triple;

typedef struct{
	Triple  data[MAXSIZE+1];/*非零元三元组,data[0]未用*/
	int  mu,nu,tu; /*矩阵的行数、列数和非零元个数*/
} TSMatrix;
TSMatrix  M,T ;

/*建立矩阵的三元组表达*/
void initarray(TSMatrix *A){
  int   i,j,e,p=0;
  A->mu=0;
  A->nu=0;
 while(1){
    printf("\n请输入矩阵节点的信息==>(行  列  值)(exit for -1):");
    scanf("%d%d%d",&i,&j,&e);
    if (i==-1)  break;
    if (p>MAXSIZE){
         printf("\nthe space is full.");
         break;
       }/*if*/
   else {
              A->data[++p].row=i;
              A->data[p].col=j;
              A->data[p].data=e;
             A->mu =(A->mu > i)? A->mu :i ;
             A->nu =( A->nu > j) ? A->nu :j  ;
            }/*else*/
   }/*while*/
   A->tu=p;
}/*initarray*/

/*输出矩阵的三元组*/
void Print(TSMatrix *A){
  int i;
  printf("\n当前矩阵是==%d x %d,  数据个数%d",A->mu , A->nu , A->tu);
  for(i=1;i<=A->tu ;++i)
    printf("\n[%d , %d , %d ]",A->data[i].row,A->data[i].col,A->data[i].data);
  printf("\n当前矩阵输出结束.");
}/*Print*/

/*矩阵A转置成矩阵B*/
void TransMatrix(TSMatrix *A ,TSMatrix *B){
   int  q , j , p ;
   B->mu=A->nu ; B->nu=A->mu ; B->tu= A->tu;
   if ( B->tu){
        q=1;
         for( j=1; j<=A->nu;++j)
             for ( p=1;p<=A->tu;++p)
             if ( A->data[p].col==j){
                    B->data[q].row=A->data[p].col;
                    B->data[q].col=A->data[p].row;
                    B->data[q].data=A->data[p].data;
                    ++q;
                 }/*if*/
      }/*if*/
}/*TransMatrix*/

int main(){ 
  initarray(&M);
  Print(&M);
  TransMatrix(&M,&T);
  Print(&T);
  system("pause");
  exit(0);
}

运行结果:


请输入矩阵节点的信息==>(行  列  值)(exit for -1):1 3 -3

请输入矩阵节点的信息==>(行  列  值)(exit for -1):1 6 15

请输入矩阵节点的信息==>(行  列  值)(exit for -1):2 1 12

请输入矩阵节点的信息==>(行  列  值)(exit for -1):2 5 18

请输入矩阵节点的信息==>(行  列  值)(exit for -1):3 1 9

请输入矩阵节点的信息==>(行  列  值)(exit for -1):3 4 24

请输入矩阵节点的信息==>(行  列  值)(exit for -1):4 6 -7

请输入矩阵节点的信息==>(行  列  值)(exit for -1):6 3 14

请输入矩阵节点的信息==>(行  列  值)(exit for -1):-1 -1 -1

当前矩阵是==6 x 6,  数据个数8
[1 , 3 , -3 ]
[1 , 6 , 15 ]
[2 , 1 , 12 ]
[2 , 5 , 18 ]
[3 , 1 , 9 ]
[3 , 4 , 24 ]
[4 , 6 , -7 ]
[6 , 3 , 14 ]
当前矩阵输出结束.
当前矩阵是==6 x 6,  数据个数8
[1 , 2 , 12 ]
[1 , 3 , 9 ]
[3 , 1 , -3 ]
[3 , 6 , 14 ]
[4 , 3 , 24 ]
[5 , 2 , 18 ]
[6 , 1 , 15 ]
[6 , 4 , -7 ]
当前矩阵输出结束.请按任意键继续. . .

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值