1、西安邮电学院数据结构实验报告稀疏矩阵一次定位快速转置班 级 :班内序号 :学生姓名 :指导教师 :时间 :1目 录一、实验目的 2二、实验内容 2三、数据结构及算法思想 21、对各个模块进行功能的描述 .22、模块之间关系及其相互调用的图示 .3五、详细设计及运行结果 31、设计源代码: .32、运行结果: .5六、调试情况,设计技巧及体会 52一、实验目的1、进一步理解数组这个我们十分熟悉的结构,并了解在计数机内部是如何处理数组的。2、熟悉并掌握特殊矩阵的定义和分类,并掌握它们的一种压缩存储方法。3、理解并运用三元组表示方法压缩稀疏矩阵,通过“一次定位快速转置”法实现稀疏矩阵的转置。二、实验
2、内容 运用“一次定位快速转置”实现对一个已知行、列及非零元素个数的稀疏矩阵的三元组表表示的转置。三、数据结构及算法思想“一次定位快速转置”即将被转置的三元组表 A 的元素一次定位到三元组表 B 的正确位置上,具体做法为:用 positioncol的初值表示三元组 A 中第 col 列中第一个非零元素的正确位置,当三元组 A 中第 col 列有一个元素加入到三元组表 B 时,则 positioncol= positioncol+1,使 positioncol始终指向三元组表 A 中第 col 列中下一个非零元素在三元素表 B 中的正确位置。四、模块划分1、对各个模块进行功能的描述本次设计共分为三
3、个模块,分别是输入模块、转置模块、显示模块。各个模块功能如下表。表格 1模 块 功能描述输入模块 实现稀疏矩阵的行、列和非零元素个数及三元组表的输入。转置模块 实现“一次定位快速转置”的算法。显示模块 显示转置前后的三元组表。32、模块之间关系及其相互调用的图示开始输入模块转置模块显示模块显示模块结束图 1五、详细设计及运行结果1、设计源代码:#include“stdio.h“#include“malloc.h“#define MAXSIZE 1000typedef structint row,col; int e;Triple;4typedef structTriple dataMAXSIZ
4、E+1; int m,n,len;TSMatrix;void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B)int col,t,p,q;int numMAXSIZE,positionMAXSIZE; B-len=A.len; B-n=A.m; B-m=A.n;if(B-len)for(col=1;coldataq.row=A.datap.col;B-dataq.col=A.datap.row;B-dataq.e=A.datap.e;positioncol+;main()TSMatrix M;TSMatrix *N=(TSMatrix *)malloc
5、(sizeof(TSMatrix);int i;printf(“请输入稀疏矩阵的行列数和非零元素的个数:n“);scanf(“%d%d%d“,printf(“请输入非零元素的位置下标和元素值:n“);for(i=1;ilen;i+)printf(“n%d %d %d“,N-datai.row,N-datai.col,N-datai.e);getch();2、运行结果:图 2六、调试情况,设计技巧及体会通过这次稀疏矩阵的“一次定位快速转置”设计的练习,我更充分掌握和理解了数组这一数据结构类型,并学习了特殊矩阵的压缩存储方法,体会到完一个程序,只是完成一个设计的一小部分,后期的调试和验证也是重要的一部分,这次设计完成代码后编译都没错,但运行结果却不正确,通过调试后才的找出错误,运行成功,但经过一些数据的验证却又发现问题,最后才发现是有个地方少输入一个“=”的原因,经过改正后结果就正确了,所以一个设计的完成是需要不断的改进、调试和验证的,其中耐心和细心更是不可缺少的。更重要的是通过这次实践操作学会了完成一个设计的基本方法和步骤,拿到一个问题不能急于开始书写代码要将问题理清楚、找清思路、分好模块再开始敲代码,代码只是实现一个功能的工具,只有好的解决问题的思路,才能做出好的程序。