欢迎来到天天文库
浏览记录
ID:41721544
大小:57.00 KB
页数:5页
时间:2019-08-30
《数据结构实验二实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一题冃:稀疏矩阵转置班级:姓名:学号:完成日期一、题目要求:输出稀疏矩阵的转置矩阵。(行列均不大于20)要求为输入两个正整数n和m,为矩阵的行和列,然后输入矩阵三元组,(0,0,0)表示结束输入。二、概要设计1•需要的数据结构为:线性表。2.需要线性表的抽象数据类型:ADTSparseMatrix{数据对象:D={aij:
2、aij^TermSet,n20m和n分别成为矩阵的行数和列数}数据关系:R={Row,Col}Row={
3、lWiWm,Col={
4、lWjWn}基本操作:CreateSMtrix
5、f&M)操作结果:创建稀疏矩阵DestroySMaix(&M)初始条件:稀疏矩阵M己存在。操作结果:销毁稀疏矩阵M。PrintSMatrix(L)初始条件:稀疏矩阵M已经存在。操作结果:输出稀疏矩阵M。CopySMatrix(M,&T)初始条件:稀疏矩阵M己经存在。操作结果:由稀疏矩阵M复制得到T。TransposeSMatrixfM,&T)初始条件:稀疏矩阵M已经存在。操作结果:求稀疏矩阵M的转转矩阵To}ADTSparseMatrix三、详细设计1•元素类型,结点类型typedefstruct{intijv;}NODE;typedefstruc
6、t{intm,n,t;NODEdata[MAX+l];}MT;2.对抽象数据类型中的部分基本操作的伪码算法如下:/*三元组的转置*/MTtran(MTa){//采用三元组存储表示,求稀疏矩阵a的转置矩阵bintp,q,col;MTb;b.m=a.n;b.n=a.m;b.t=a.t;if(a.t!=O){q=0;for(col=0;col7、[q].v=a.data[p].v;q++;}}return(b);}/*主函数(包含输入输出函数)*/intmain(){MTa,b;intn;scanf(”%d”,&r);〃输入行数scanf(“%d”,&c);〃输入列数t=0;a.m=r;a.n=c;for(i=0;;i++)〃输入初始矩阵a{scanf("%d%d%d,,/&r,&c/&n);a.data[i].i=r;a.data[i].j=c;a.data[i].v=n;t++;if(a.data[i].i==O&&a.data[i].j==O&&a.data[i].v==O)brea8、k;//输入(OOO)结束a.t=t;b=tran(a);for(i=0;i9、'MAX'wasnotdeclaredinthisscope10、等,经检查后发现错误,再开头加声明#deefineMAXSIZE1000,最终解决错误。2.编译的时候错误一大堆,不过最关键的是转置函数的错误,再运行的结果中出现不了想要的结果,经过一一排除后,才发现只是一个赋值语句的顺序颠倒而已。编程就是这样,牵一发而动全身,一个字母就有可能导致全面崩盘。3.特殊点的错误。一开始的程序中,对于以(0,0,t)类型的三元组不能有效识别并排序。例子如下图:11281812401188812最后才发现输出的部分并不是那么合理,因为我把结束标志当成一个矩阵元素11、对待,同样记录其中,固然再编写算法的时候取了巧,但是输出后却发生了错误。4.不得不提其屮出现的另一种问题,我在编程序的时候喜欢添加一些输出汉字来提示自己到的阶段,然而noj并不能很智能的处理多输出的格式问题。虽然有画蛇添足的嫌疑,但是希望以后的NOJ系统更智能化。5.本次程序采用了数据抽象的程序设计方法,运用线性表的知识处理三元组数组类型的问题,并且将程序分为两部分,一部分为矩阵转置算法,另一部分为主函数,分而治之,容易调试,自己以后的编程屮,会更偏向于这种分块的编程模式。五、用户操作说明见三详细设计说明黑体字部分。文字描述:需要输入的数据有:矩阵12、的行与列44输入的矩阵:111212323七、附录源程序。#include#defineMAX10000
7、[q].v=a.data[p].v;q++;}}return(b);}/*主函数(包含输入输出函数)*/intmain(){MTa,b;intn;scanf(”%d”,&r);〃输入行数scanf(“%d”,&c);〃输入列数t=0;a.m=r;a.n=c;for(i=0;;i++)〃输入初始矩阵a{scanf("%d%d%d,,/&r,&c/&n);a.data[i].i=r;a.data[i].j=c;a.data[i].v=n;t++;if(a.data[i].i==O&&a.data[i].j==O&&a.data[i].v==O)brea
8、k;//输入(OOO)结束a.t=t;b=tran(a);for(i=0;i9、'MAX'wasnotdeclaredinthisscope10、等,经检查后发现错误,再开头加声明#deefineMAXSIZE1000,最终解决错误。2.编译的时候错误一大堆,不过最关键的是转置函数的错误,再运行的结果中出现不了想要的结果,经过一一排除后,才发现只是一个赋值语句的顺序颠倒而已。编程就是这样,牵一发而动全身,一个字母就有可能导致全面崩盘。3.特殊点的错误。一开始的程序中,对于以(0,0,t)类型的三元组不能有效识别并排序。例子如下图:11281812401188812最后才发现输出的部分并不是那么合理,因为我把结束标志当成一个矩阵元素11、对待,同样记录其中,固然再编写算法的时候取了巧,但是输出后却发生了错误。4.不得不提其屮出现的另一种问题,我在编程序的时候喜欢添加一些输出汉字来提示自己到的阶段,然而noj并不能很智能的处理多输出的格式问题。虽然有画蛇添足的嫌疑,但是希望以后的NOJ系统更智能化。5.本次程序采用了数据抽象的程序设计方法,运用线性表的知识处理三元组数组类型的问题,并且将程序分为两部分,一部分为矩阵转置算法,另一部分为主函数,分而治之,容易调试,自己以后的编程屮,会更偏向于这种分块的编程模式。五、用户操作说明见三详细设计说明黑体字部分。文字描述:需要输入的数据有:矩阵12、的行与列44输入的矩阵:111212323七、附录源程序。#include#defineMAX10000
9、'MAX'wasnotdeclaredinthisscope
10、等,经检查后发现错误,再开头加声明#deefineMAXSIZE1000,最终解决错误。2.编译的时候错误一大堆,不过最关键的是转置函数的错误,再运行的结果中出现不了想要的结果,经过一一排除后,才发现只是一个赋值语句的顺序颠倒而已。编程就是这样,牵一发而动全身,一个字母就有可能导致全面崩盘。3.特殊点的错误。一开始的程序中,对于以(0,0,t)类型的三元组不能有效识别并排序。例子如下图:11281812401188812最后才发现输出的部分并不是那么合理,因为我把结束标志当成一个矩阵元素
11、对待,同样记录其中,固然再编写算法的时候取了巧,但是输出后却发生了错误。4.不得不提其屮出现的另一种问题,我在编程序的时候喜欢添加一些输出汉字来提示自己到的阶段,然而noj并不能很智能的处理多输出的格式问题。虽然有画蛇添足的嫌疑,但是希望以后的NOJ系统更智能化。5.本次程序采用了数据抽象的程序设计方法,运用线性表的知识处理三元组数组类型的问题,并且将程序分为两部分,一部分为矩阵转置算法,另一部分为主函数,分而治之,容易调试,自己以后的编程屮,会更偏向于这种分块的编程模式。五、用户操作说明见三详细设计说明黑体字部分。文字描述:需要输入的数据有:矩阵
12、的行与列44输入的矩阵:111212323七、附录源程序。#include#defineMAX10000
此文档下载收益归作者所有