资源描述:
《稀疏矩阵一次快速转置》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、西安邮电学院数据结构实验报告稀疏矩阵一次定位快速转置班级:班内序号:学生姓名:指导教师:时间:5目录一、实验目的2二、实验内容2三、数据结构及算法思想21、对各个模块进行功能的描述22、模块之间关系及其相互调用的图示3五、详细设计及运行结果31、设计源代码:32、运行结果:5六、调试情况,设计技巧及体会55一、实验目的1、进一步理解数组这个我们十分熟悉的结构,并了解在计数机内部是如何处理数组的。2、熟悉并掌握特殊矩阵的定义和分类,并掌握它们的一种压缩存储方法。3、理解并运用三元组表示方法压缩稀疏矩阵,通过“一次定位快速转置”法实现稀疏矩阵的转置。二、实验内容运用“一次定位快速
2、转置”实现对一个已知行、列及非零元素个数的稀疏矩阵的三元组表表示的转置。三、数据结构及算法思想“一次定位快速转置”即将被转置的三元组表A的元素一次定位到三元组表B的正确位置上,具体做法为:用position[col]的初值表示三元组A中第col列中第一个非零元素的正确位置,当三元组A中第col列有一个元素加入到三元组表B时,则position[col]=position[col]+1,使position[col]始终指向三元组表A中第col列中下一个非零元素在三元素表B中的正确位置。四、模块划分1、对各个模块进行功能的描述本次设计共分为三个模块,分别是输入模块、转置模块、显示
3、模块。各个模块功能如下表。表格1模块功能描述输入模块实现稀疏矩阵的行、列和非零元素个数及三元组表的输入。转置模块实现“一次定位快速转置”的算法。显示模块显示转置前后的三元组表。52、模块之间关系及其相互调用的图示图1五、详细设计及运行结果1、设计源代码:#include"stdio.h"#include"malloc.h"#defineMAXSIZE1000typedefstruct{introw,col;inte;}Triple;5typedefstruct{Tripledata[MAXSIZE+1];intm,n,len;}TSMatrix;voidFastTranspo
4、seTSMatrix(TSMatrixA,TSMatrix*B){intcol,t,p,q;intnum[MAXSIZE],position[MAXSIZE];B->len=A.len;B->n=A.m;B->m=A.n;if(B->len){for(col=1;col<=A.n;col++)num[col]=0;for(t=1;t<=A.len;t++)num[A.data[t].col]++;position[1]=1;for(col=2;col<=A.n;col++)position[col]=position[col-1]+num[col-1];for(p=1;p<=
5、A.len;p++){col=A.data[p].col;q=position[col];B->data[q].row=A.data[p].col;B->data[q].col=A.data[p].row;B->data[q].e=A.data[p].e;position[col]++;}}}main(){TSMatrixM;TSMatrix*N=(TSMatrix*)malloc(sizeof(TSMatrix));inti;printf("请输入稀疏矩阵的行列数和非零元素的个数:");scanf("%d%d%d",&M.m,&M.n,&M.len);printf("请
6、输入非零元素的位置下标和元素值:");for(i=1;i<=M.len;i++)scanf("%d%d%d",&M.data[i].row,&M.data[i].col,&M.data[i].e);printf("稀疏矩阵的三元组表示:");for(i=1;i<=M.len;i++)printf("%d%d%d",M.data[i].row,M.data[i].col,M.data[i].e);FastTransposeTSMatrix(M,N);printf("转置后的三元组:");5for(i=1;i<=N->len;i++)printf("%d%d%
7、d",N->data[i].row,N->data[i].col,N->data[i].e);getch();}2、运行结果:图2六、调试情况,设计技巧及体会通过这次稀疏矩阵的“一次定位快速转置”设计的练习,我更充分掌握和理解了数组这一数据结构类型,并学习了特殊矩阵的压缩存储方法,体会到完一个程序,只是完成一个设计的一小部分,后期的调试和验证也是重要的一部分,这次设计完成代码后编译都没错,但运行结果却不正确,通过调试后才的找出错误,运行成功,但经过一些数据的验证却又发现问题,最后才发现是有个地方少输入一