稀疏矩阵的表示和转置
- 格式:doc
- 大小:20.50 KB
- 文档页数:6
实验2 稀疏矩阵的表示与转置
实验人:杜国胜学号:Xb14680103
时间:11.9
1、实验目的
1.掌握稀疏矩阵的三元组顺序表存储结构
2.掌握稀疏矩阵的转置算法。
2、实验内容
采用三元组表存储表示,求稀疏矩阵M的转置矩阵T。(算法5.1)
3、实验步骤:
1.构建稀疏矩阵M。
2.求稀疏矩阵M的转置矩阵T。
3.输出稀疏矩阵M与稀疏矩阵T。
4、算法说明
首先要创建稀疏矩阵与三元组顺序表,定义mu,mu,tu分别表示矩阵的行列数与非零元个数。在进行稀疏矩阵的转置时要做到1.将矩阵的行列值相互交换2.将每个三元组的I,j相互调换3.重排三元组之间的次序
5、测试结果
6、分析讨论
在此次程序中转置的方法称为快速转置,在转置前,应先求的M的每一列中非零元的个数,进而求得每一列的第一个非零元的位置
7、附录:源代码
#include<stdio.h>
#define MAXSIZE 100
typedef struct
int i,j;
int e;
}Triple;
typedef struct
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
//创建稀疏矩阵M
void CreateSMatrix (TSMatrix *M)
int i,m,n,e,k;
printf("输入矩阵M的行数、列数、非零元的个数(中间用逗号隔开):");
scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);
(*M).data[0].i=0;
printf("\n");
for(i=1;i<=(*M).tu;i++)
do
printf("输入第%d个非零元素所在的行(1~%d)列(1~%d)值以及该数值:",i,(*M).mu,(*M).nu);
scanf("%d,%d,%d",&m,&n,&e);
k=0;
if(m<1||m>(*M).mu||n<1||n>(*M).nu)
k=1;
if(m<(*M).data[i-1].i||m==(*M).data[i-
1].i&&n<(*M).data[i-1].j)
k=1;
}while(k);
(*M).data[i].i=m;
(*M).data[i].j=n;
(*M).data[i].e=e;
printf("\n");
//输出稀疏矩阵M
void PrintSMatrix(TSMatrix M)
int i;
printf("**************************************\n");
for(i=1;i<=M.tu;i++)
printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[ i].e);
printf("\n");
//求稀疏矩阵M的转置矩阵T
void TransposeSMatrix(TSMatrix M,TSMatrix *T) int p,q,col;
(*T).mu=M.nu;
(*T).nu=M.mu;
(*T).tu=M.tu;
if((*T).tu)
q=1;
for(col=1;col<=M.nu;++col)
for(p=1;p<=M.tu;++p)
if(M.data[p].j==col)
(*T).data[q].i=M.data[p].j;
(*T).data[q].j=M.data[p].i;
(*T).data[q].e=M.data[p].e;
++q;
void print(TSMatrix A)
int k=1,a,b;
int M[MAXSIZE][MAXSIZE];
printf("非零元素所对应的位置:\n");
for(a=0;a<A.mu;a++)
for(b=0;b<A.nu;b++)
M[a][b]=0;
while(k<=A.tu)
M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e;
k++;
for(a=0;a<A.mu;a++)
printf(" | ");
for(b=0;b<A.nu;b++)
printf("%d ",M[a][b]);
printf(" | \n");
printf("**************************************\n"); printf("\n");
//主函数
int main()
TSMatrix M,T;
printf("创建矩阵M:");
CreateSMatrix(&M);
printf("矩阵M的三元组表为:\n"); PrintSMatrix(M);
print(M);
TransposeSMatrix(M,&T);
printf("稀疏矩阵M的转换矩阵T的三元组表为:\n"); PrintSMatrix(T);
print(T);
printf("\n\n");
getchar();
return 0;