资源描述:
《数据结构 课程设计.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、设计性综合性实验实验课题名称:稀疏矩阵运算器院系:计算机科学与技术学院专业:计算机科学与技术课程:数据结构教师:学号:姓名:学号:姓名:学号:姓名:学号:姓名:学号:姓名:2010至2011学年度上学期实验名称:稀疏矩阵运算器实验性质:设计性实验器材:PC机并装有VC++6.0环境实验目的:深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性实验任务:实现一个能进行稀疏矩阵基本运算的运算器,要求以带“行逻辑链接信息”的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入以三元组表示,输出以通
2、常的阵列形式列出。实验内容、过程及结果:1.问题描述稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行储存和计算可以大大节省储存空间,提高计算效率。实现能进行称稀疏矩阵基本运算的运算器。基本要求:以带逻辑链接信息的三元组顺序表表示稀疏矩阵,实现矩阵相加,相减,相乘的运算。稀疏矩阵的输入形式采用三元组表示。而运算结果的矩阵则用通常的阵列形式列出。测试数据:+=+=*=2.设计思路A.行逻辑链接的顺序表为了便于随机存取任意一行的非零元,则需知道每一行的第一个非零元在三元组表中的位置。为此,可将指示“行”信息的辅助
3、数组cpot固定在稀疏矩阵的存储结构中B.数据结构的选用为了实现稀疏矩阵的各种运算,采用三元组的方式储存矩阵C.矩阵的各种运算为了求2和矩阵的各类运算,只需要在相乘2个矩阵中相对应的各个元素的j值和i值相运算即可3.解决问题【主程序模块】:voidmain(){初始化;do{接受命令;处理命令;}while(命令!=“退出”);}【功能模块调用关系图】【详细设计】typedefstruct{introw;//行数intcol;//列数intv;//非零元素值}triplenode;typedefstruct{t
4、riplenodedata[maxsize+1];//非零元三元组introwtab[maxrow+1];//各行第一个非零元的位置表intmu,nu,tu;//矩阵的行数、列数和非零元个数}rtripletable;voidcreat(rtripletable&A)//创建稀疏矩阵voidprint(rtripletableA)//输出稀疏矩阵intaddsmatrix(rtripletableM,rtripletableN)//矩阵相加intsubsmatrix(rtripletableM,rtriplet
5、ableN)//稀疏矩阵相减voidmultsmatrix(rtripletableM,rtripletableN,rtripletable&Q)//稀疏矩阵相乘四.实现1.功能函数设计ADTArray{数据对象:D={aij
6、0≤i≤b1-1,0≤j≤b2-1}数据关系:R={ROW,COL}ROW={
7、0≤i≤b1-2,0≤j≤b2-1}COL={
8、0≤i≤b1-1,0≤j≤b2-2}基本操作:CreateSMatrix(&M);//操作结果:创建稀疏矩阵
9、M.PrintSMatrix(M);//初始化条件:稀疏矩阵M存在.//操作结果:输出稀疏矩阵M.AddSMatrix(M,N,&Q);//初始化条件:稀疏矩阵M与N的行数和列数对应相等.//操作结果:求稀疏矩阵的和Q=M+N.SubSMatrix(M,N,&Q);//初始化条件:稀疏矩阵M与N的行数和列数对应相等.//操作结果:求稀疏矩阵的差Q=M-N.MultSMatrix(M,N,&Q);//初始化条件:稀疏矩阵M的列数等于N的行数.//操作结果:求稀疏矩阵的乘积Q=M*N.}ADTArray【源程序】#
10、include#include#include#definemaxsize100#definemaxrow100#defineOK1#defineERROR-1typedefstruct{introw;//行数intcol;//列数intv;//非零元素值}triplenode;typedefstruct{triplenodedata[maxsize+1];//非零元三元组introwtab[maxrow+1];//各行第一个非零元的位置表intmu
11、,nu,tu;//矩阵的行数、列数和非零元个数}rtripletable;voidcreat(rtripletable&A)//创建稀疏矩阵{intk=1,sum=1,loop,p,t;intnum[maxrow+1];cout<<"请输入矩阵的行数和列数:"<>A.mu;cout<<"列数:";cin>>A.nu;cout<<"非零元素个数