#include<stdio.h>
#include<stdlib.h>
#define max 100
typedef struct{
int r;
int c;
int d;
}TupNode;
typedef struct{
int rows;
int cols;
int nums;
TupNode data[max];
}TSMatrix;
void creat(TSMatrix* &s)//创建
{
s=(TSMatrix*)malloc(sizeof(TSMatrix));
}
void CreateMat(TSMatrix* &s,int a[4][4])//矩阵的转化
{
int i,j;
s->nums=0;
s->rows=4;
s->cols=4;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(a[i][j]!=0)
{
s->data[s->nums].r=i;
s->data[s->nums].c=j;
s->data[s->nums].d=a[i][j];
s->nums++;
}
}
}
}
void TrantTat(TSMatrix* &s,TSMatrix* &sb)//矩阵的逆置
{
int k,kl=0,v;
sb->rows=s->rows;
sb->cols=s->cols;
sb->nums=s->nums;
if(s->nums!=0)
{
for (v=0;v<s->cols;v++)
{
for(k=0;k<s->nums;k++)
{
if(s->data[k].c==v)
{
sb->data[kl].r=s->data[k].c;
sb->data[kl].c=s->data[k].r;
sb->data[kl].d=s->data[k].d;
kl++;
}
}
}
}
}
void printMat(TSMatrix* &s)//三元组的打印
{
printf("\t%d\t%d\t%d\n",s->rows,s->cols,s->nums);
for(int i=0;i<s->nums;i++)
{
printf("\t%d\t%d\t%d\n",s->data[i].r,s->data[i].c,s->data[i].d);
}
}
int main()
{
TSMatrix* S;
TSMatrix* q;
TSMatrix* Q;
int arry[4][4]={
{1,0,3,0},
{0,1,0,0},
{0,0,1,0},
{0,0,1,1}};
int barry[4][4]={
{3,0,0,0},
{0,4,0,0},
{0,0,1,0},
{0,0,0,2}};
creat(S);
creat(q);
CreateMat(S,arry);
printf("-----------a的三元组-----------\n");
printMat(S);
creat(Q);
CreateMat(Q,barry);
printf("-----------b的三元组-----------\n");
printMat(Q);
TrantTat(S,q);
printf("-----------a的转置三元组-------\n");
printMat(q);
TrantTat(Q,q);
printf("-----------b的转置三元组-------\n");
printMat(q);
return 0;
}