资源描述:
《稀疏矩阵三元组实现矩阵转置算法实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、稀疏矩阵三元组实现矩阵转置算法实验报告实验三稀疏矩阵的三元组表示实现矩阵转置算法学院专业班学号姓名实习目的掌握稀疏矩阵的三元组顺序表存储表示;掌握稀疏矩阵三元组表示的传统转置算法的实现;掌握稀疏矩阵三元组表示的快速转置算法的实现;实习内容稀疏矩阵的按三元组形式输入,即按行序输入非零元的行号、列号、值,实现传统转置算法,输出按通常的阵列形式输出。稀疏矩阵的按三元组形式输入,即按行序输入非零元的行号、列号、值,实现快速转置算法,输出按通常的阵列形式输出。实验步骤三元组的定义#defineMAX_SIZE100
2、//非零元个数的最大值structTriple{inti,j;//行下标,列下标Elemtypee;//非零元素值};structTSMatrix{structTripledata[MAX_SIZE+1];//非零元三元组表,data[0]未用intmu,nu,tu;//矩阵的行数、列数和非零元个数};创建稀疏矩阵M(按三元组形式输入,即按行序输入非零元的行号、列号、值)3.编写三元组传统转置函数。4.编写三元组快速转置函数。4..主函数(1)程序代码#include"stdio.h&q
3、uot;#include"stdlib.h"#defineMAX_SIZE100//非零元个数的最大值TypedefintElemType;structTriple{inti,j;//行下标,列下标ElemTypee;//非零元素值};structTSMatrix{structTripledata[MAX_SIZE+1];//非零元三元组表,data[0]未用intmu,nu,tu;//矩阵的行数、列数和非零元个数};intCreateSMatrix(TSMatrix&M){/
4、/创建稀疏矩阵Minti,m,n;ElemTypee;intk;printf("请输入矩阵的行数,列数,非零元素数:");scanf("%d,%d,%d",&M.mu,&M.nu,&M.tu);if(M.tuMAX_SIZE)return-1;M.data[0].i=0;//为以下比较顺序做准备for(i=1;i=M.tu;i++){do{printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:
5、",i,M.mu,M.nu);scanf("%d,%d,%d",&m,&n,&e);//输入非零元的行号、列号、元素值k=0;if(m1
6、
7、mM.mu
8、
9、n1
10、
11、nM.nu)//行或列超出范围k=1;if(mM.data[i-1].i
12、
13、m==M.data[i-1].i&&n=M.data[i-1].j)//行或列的顺序有错k=1;}while(k);M.data[i].i=m;//将m,n,e填入MM.data[i].j=n;M.da
14、ta[i].e=e;}return1;}voidPrintSMatrix(TSMatrixM){//按矩阵形式输出Minti,j,k=1;Triple*p=M.data;p++;//p指向第1个非零元素for(i=1;i=M.mu;i++){for(j=1;j=M.nu;j++)if(k=M.tu&&p-i==i&&p-j==j)//p指向非零元,且p所指元素为当前处理元素{printf("%3d",p-e);//输出p所指元素的值p++;//p指向下一
15、个元素k++;//计数器+1}else//p所指元素不是当前处理元素Printf("%3d",0);//输出0printf("");}}voidTransposeSMatrix(TSMatrixM,TSMatrix&T){//求稀疏矩阵M的转置矩阵T。intp,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.
16、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;}}}voidFastTransposeSMatrix(TSMatrixM,TSMatrix&T){//快速求稀疏矩阵M的转置矩阵T。算法5.2改intp,q,t,k,col,*num,*cpot;num=(int*)malloc((M.