目录
1.稀疏矩阵的三元组顺序表存储表示
2.主函数
3.输出函数
4.转置输出
5.总代码
6.输出样例
1.稀疏矩阵的三元组顺序表存储表示
#define MAXSIZE 500 //非零元素个数最大值
typedef int Elemtype;
typedef struct
{
int i,j; //非零元素的行标、列标
Elemtype e;
}Triple;
typedef struct
{
int mu,nu,tu; //矩阵的行数、列数、非零元素实际个数
Triple date[MAXSIZE+1];
//0下标不储存,方便后续操作
}TSMatrix;
2.主函数
int main()
{
TSMatrix M;
printf("\n请输入矩阵行数:\n");
scanf("%d",&M.mu);
printf("请输入矩阵列数:\n");
scanf("%d",&M.nu);
printf("请输入非零元素个数:\n");
scanf("%d",&M.tu);
printf("请输入非零元素行标、列标及其值:\n");
printf("行标\t列标\t值\n");
for(int i = 1;i <= M.tu;i++)
{
scanf("%d\t%d\t%d",&M.date[i].i,&M.date[i].j,&M.date[i].e);
}
output(M); //输出稀疏矩阵
printf("\n");
TransposeM(M); //转置输出稀疏矩阵
return 0;
}
3.输出函数
void output(TSMatrix M)
{
int i,j,t;
for(i = 1;i <= M.mu;i++)
{
for(j = 1;j <= M.nu;j++)
{
for(t = 1;t <= M.tu;t++) //和每一个非零元素的行列对照
{
if(i == M.date[t].i && j == M.date[t].j)
{ //如果相等
printf("%d\t",M.date[t].e);//则输出相应坐标对应的值
break;
}
}
if(t == M.tu+1) //如果t增加到非零元素总个数(M.tu)证明此坐标下不是非零元素
{
printf("0\t"); //则输出0
}
}
printf("\n");
}
}
4.转置输出
void TransposeM(TSMatrix M) //原理通同上输出函数
{
int i,j,t;
for(i = 1;i <= M.mu;i++)
{
for(j = 1;j <= M.nu;j++)
{
for(t = 1;t <= M.tu;t++)
{
if(i == M.date[t].j && j == M.date[t].i)
{ //行列转换对照
printf("%d\t",M.date[t].e);
break;
}
}
if(t == M.tu+1)
{
printf("0\t");
}
}
printf("\n");
}
}
5.总代码
#include<stdio.h>
#define MAXSIZE 500//非零元素个数最大值
typedef int Elemtype;
typedef struct
{
int i,j; //非零元素的行标、列标
Elemtype e;
}Triple;
typedef struct
{
int mu,nu,tu;//矩阵的行数、列数、非零元素实际个数
Triple date[MAXSIZE+1];//0下标不储存,方便后续操作
}TSMatrix;
void output(TSMatrix M);
void TransposeM(TSMatrix M);
int main()
{
TSMatrix M;
printf("\n请输入矩阵行数:\n");
scanf("%d",&M.mu);
printf("请输入矩阵列数:\n");
scanf("%d",&M.nu);
printf("请输入非零元素个数:\n");
scanf("%d",&M.tu);
printf("请输入非零元素行标、列标及其值:\n");
printf("行标\t列标\t值\n");
for(int i = 1;i <= M.tu;i++)
{
scanf("%d\t%d\t%d",&M.date[i].i,&M.date[i].j,&M.date[i].e);
}
output(M);//输出稀疏矩阵
printf("\n");
TransposeM(M);//转置输出稀疏矩阵
return 0;
}
void output(TSMatrix M)
{
int i,j,t;
for(i = 1;i <= M.mu;i++)
{
for(j = 1;j <= M.nu;j++)
{
for(t = 1;t <= M.tu;t++)//和每一个非零元素的行列对照
{
if(i == M.date[t].i && j == M.date[t].j)//如果相等
{
printf("%d\t",M.date[t].e);//则输出相应坐标对应的值
break;
}
}
if(t == M.tu+1)//如果t增加到非零元素总个数(M.tu)证明此坐标下不是非零元素
{
printf("0\t");//则输出0
}
}
printf("\n");
}
}
void TransposeM(TSMatrix M)//原理通同上输出函数
{
int i,j,t;
for(i = 1;i <= M.mu;i++)
{
for(j = 1;j <= M.nu;j++)
{
for(t = 1;t <= M.tu;t++)
{
if(i == M.date[t].j && j == M.date[t].i)//行列转换对照
{
printf("%d\t",M.date[t].e);
break;
}
}
if(t == M.tu+1)
{
printf("0\t");
}
}
printf("\n");
}
}
6.输出样例
?
|