资源描述:
《数据结构课程设计--稀疏矩阵的存储及运算》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《数据结构》课程设计稀疏矩阵的存储及运算一目的通过课程设计,巩固和加深对特殊矩阵的压缩存储以及稀疏矩阵的三元组表示等理论知识的理解,能够熟练地运用VC环境以及加深文件的操作;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。二需求分析为了节约存储空间,稀疏矩阵通常采用压缩存储的方式。将给定的稀疏矩阵进行压缩存储,并实现矩阵的转置等运算。功能要求及说明:将稀疏矩阵采用行逻辑链接的顺序表进行存储,实现下列操作:1、任意给定两个稀疏矩阵M和N,数据从文件读取,压
2、缩存储M和N;2、分别求M和N的转置矩阵S和T;3、求Q=M×N;4、打印矩阵的形状;6、采用模块化设计。三概要设计1、本程序包含两个模块(1)主函数模块:main(){定义及初始化从文件中读取数据,输出矩阵调用转置和乘积函数,输出转置矩阵以及乘积矩阵}(2)自定义函数模块:输入函数istream&operator>>(istream&ins,RLSMatrix&m),9《数据结构》课程设计输出函数PrintSMatrix(RLSMatrix&m),转置函数TransposeSMatrix(RLSMatrixm,RLSMatrix&s),乘积函数M
3、ultSMatrix(RLSMatrixM,RLSMatrixN,RLSMatrix&Q)。2、子程序类型定义:istream&operator>>(istream&ins,RLSMatrix&m);操作结果:创建稀疏矩阵,将输入流作为返回参数voidPrintSMatrix(RLSMatrix&m);操作结果:按矩阵形式输出mStatusMultSMatrix(RLSMatrixM,RLSMatrixN,RLSMatrix&Q);操作结果:求矩阵乘积Q=M*N,采用行逻辑链接存储表示。StatusTransposeSMatrix(RLSMatri
4、xm,RLSMatrix&s);操作结果:采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T四详细设计1、主函数之前定义非零元个数及矩阵的最大值:#defineMAX_size100//非零元素个数的最大值#defineMAX_rc20//最大行列数定义矩阵的结构体类型(采取三元组顺序表存储):structTriple{inti,j;//行下标和列下标ElemTypee;//非零元素值};structRLSMatrix9《数据结构》课程设计{Tripledata[MAX_size+1];//非零元三元组表,data[0]未用intrpos[MAX_
5、rc+1];//各行第一个非零元素的位置表intmu,nu,tu;//矩阵的行数,列数和非零元素个数};2、流程图(1)主函数流程图:(2)求乘积函数的主要思想流程图:9《数据结构》课程设计9《数据结构》课程设计3、各函数详细设计(1)主函数voidmain(){ifstreamfin;charfile_name[15];cout<<"请输入文件名,"<<"该文件里的信息将作为任意给定两个稀疏矩阵的数据:"<>file_name;fin.open(file_name);if(fin.fail()){若文件打开失败则退出;}RLS
6、MatrixM,N,Q,S,T;创建矩阵M,数据从文件中读取,并以矩阵标准形式输出矩阵M;调用转置函数TransposeSMatrix(M,S)并以矩阵标准形式输出转置后的矩阵S;创建矩阵N,数据从文件中读取,并以矩阵标准形式输出矩阵N;调用转置函数TransposeSMatrix(N,T)并以矩阵标准形式输出转置后的矩阵T;调用乘积函数MultSMatrix(M,N,Q),并以矩阵标准形式输出Q;fin.close();}(2)转置矩阵函数StatusTransposeSMatrix(RLSMatrixm,RLSMatrix&s)//采用三元组顺
7、序表存储表示,求稀疏矩阵M的转置矩阵T{intcol,t,p,q;intnum[20],cpot[20];s.mu=m.nu;s.nu=m.mu;s.tu=m.tu;//初始化sif(s.tu){for(col=1;col<=m.nu;++col)num[col]=0;//设初值for(t=1;t<=m.tu;++t)//求M中每一列所含非零元的个数++num[m.data[t].j];cpot[1]=1;//求M中每一列的第一个非零元在s.data中的序号for(col=2;col<=m.nu;++col)cpot[col]=cpot[col-1
8、]+num[col-1];for(p=1;p<=m.tu;++p)//从m的第一个元素开始{col=m.data[p].j