数据结构与算法中数组和广义表的 稀疏矩阵的传统转置
#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 ]
当前矩阵输出结束.请按任意键继续. . .