#include<stdio.h>
#include<stdlib.h>
#define OK 1
typedef int Status;
typedef int ElemType;
//稀疏矩阵的三元组顺序表存储表示
#define MAXSIZE 12500//假设非零元个数的最大值为12500
typedef struct{
int i,j;//行下标和列下标
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用
int mu,nu,tu;//行数、列数、非零元个数
}TSMatrix;
//创建矩阵
Status CreateTSMatrix(TSMatrix *M)
{
printf("请输入行数、列数和非零元的个数:");
scanf("%d%d%d",&(*M).mu,&(*M).nu,&(*M).tu);
int k;
printf("请依次输入%d个非零元的行下标、列下标和值:\n",(*M).tu);
for(k=1;k<=(*M).tu;k++)
scanf("%d%d%d",&((*M).data[k].i),&((*M).data[k].j),&((*M).data[k].e));
return OK;
}
//输出矩阵
Status PrintTSMatrix(TSMatrix M)
{
if(M.mu==0||M.nu==0)
{
printf("矩阵为空!\n");
return OK;
}
printf("行数为%d,列数为%d\n",M.mu,M.nu);
if(M.tu==0)
{
printf("矩阵为零矩阵!\n");
return OK;
}
int k;
for(k=1;k<=M.tu;k++)
printf("%d\t%d\t%d\n",M.data[k].i,M.data[k].j,M.data[k].e);
return OK;
}
//矩阵的转置
Status TransposeTSMatrix(TSMatrix M,TSMatrix *T)
{
int row,k,k1=0;
(*T).mu=M.nu;
(*T).nu=M.mu;//行数变为列数,列数变为行数
(*T).tu=M.tu;
for(row=0;row<M.nu;row++)
{
for(k=1;k<=M.tu;k++)
{
if(M.data[k].j==row)
{
k1++;
(*T).data[k1].i=M.data[k].j;
(*T).data[k1].j=M.data[k].i;
(*T).data[k1].e=M.data[k].e;
}
}
}
return OK;
}
//主函数测试
int main()
{
TSMatrix M,T;
CreateTSMatrix(&M);
printf("原矩阵为:\n");
PrintTSMatrix(M);
TransposeTSMatrix(M,&T);
printf("转置后的矩阵为:\n");
PrintTSMatrix(T);
return 0;
}
三元组表稀疏矩阵
最新推荐文章于 2023-05-11 20:23:00 发布