数据构造课程设计-稀疏矩阵运算器.docx
数据构造课程设计-稀疏矩阵运算器当前位置:文档视界数据构造课程设计-稀疏矩阵运算器数据构造课程设计-稀疏矩阵运算器【实验目的】深化研究数组的存储表示和实现技术,熟悉广义表存储构造的特性。【需要分析】稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏特点进行存储和计算能够大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。要求以带“行逻辑链接信息的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入以三元组表示,输出以通常的阵列形式列出。【软件平台】Windows2000,VisualC6.0或WINTC【概要设计】ADTArray数据对象:D=aij|0ib1-1,0jb2-1数据关系:R=ROW,COLROW=|0ib1-2,0jb2-1COL=|0ib1-1,0jb2-2基本操作:CreateSMatrix(/操作结果:创立稀疏矩阵M.PrintSMatrix(M);/初始化条件:稀疏矩阵M存在./操作结果:输出稀疏矩阵M.AddSMatrix(M,N,/初始化条件:稀疏矩阵M与N的行数和列数对应相等./操作结果:求稀疏矩阵的和Q=M+N.SubSMatrix(M,N,/初始化条件:稀疏矩阵M与N的行数和列数对应相等./操作结果:求稀疏矩阵的差Q=M-N.MultSMatrix(M,N,/初始化条件:稀疏矩阵M的列数等于N的行数./操作结果:求稀疏矩阵的乘积Q=M*N.ADTArray【主程序模块】:voidmain()初始化;do接授命令;处理命令;while(命令!=“退出);【功能模块调用关系图】【具体设计】typedefstructintrow;/行数intcol;/列数intv;/非零元素值triplenode;typedefstructtriplenodedatamaxsize+1;/非零元三元组introwtabmaxrow+1;/各行第一个非零元的位置表intmu,nu,tu;/矩阵的行数、列数和非零元个数rtripletable;voidcreat(rtripletable&A)/创立稀疏矩阵voidprint(rtripletableA)/输出稀疏矩阵intaddsmatrix(rtripletableM,rtripletableN)/矩阵相加intsubsmatrix(rtripletableM,rtripletableN)/稀疏矩阵相减voidmultsmatrix(rtripletableM,rtripletableN,rtripletable&Q)/稀疏矩阵相乘【调试分析】1、由于开场对顺序存储的知识还不熟识,在三元组的存储和运用会导致算法低效。2、做到存储的时候,开场时不知道如何存储三元组,和不知怎样去运用它的行数,列数,非零元素。3、在使用选择和循环时,有时由于本人的粗心,把循环的条件弄错了。4、做本程序用到了数组的知识,有时一有不懂的东西又只能打开书来看。5、开场时没有把矩阵的加法和减法的情况考虑全面,导致输出的时候会出现简单的错误。【用户手册】1、本程序的运行环境为Windowsme下的MicrosofeVC+6.0,执行文件为:当前位置:文档视界数据构造课程设计-稀疏矩阵运算器数据构造课程设计-稀疏矩阵运算器完好代码如下:#include#include#include#definemaxsize100#definemaxrow100#defineOK1#defineERROR-1typedefstructintrow;/行数intcol;/列数intv;/非零元素值triplenode;typedefstructtriplenodedatamaxsize+1;/非零元三元组introwtabmaxrow+1;/各行第一个非零元的位置表intmu,nu,tu;/矩阵的行数、列数和非零元个数rtripletable;voidcreat(rtripletable&A)/创立稀疏矩阵intk=1,sum=1,loop,p,t;intnummaxrow+1;cout>A.mu;cout>A.nu;cout>A.tu;cout>A.dataloop.row>>A.dataloop.col>>A.dataloop.v;/输入三元组的行数,列数和非零元素值当前位置:文档视界数据构造课程设计-稀疏矩阵运算器数据构造课程设计-稀疏矩阵运算器if(M.datap.v+N.dataq.v!=0)/两个稀疏矩阵相加的结果不为0Q.datak.row=M.datap.row;Q.datak.col=M.datap.col;Q.datak.v=M.datap.v+N.dataq.v;+k;+q;+p;elseif(M.datap.colcoutN.dataq.col)/第一个稀疏矩阵列数大于第二个稀疏矩阵的列Q.datak.row=N.dataq.row;Q.datak.col=N.dataq.col;Q.datak.v=-N.dataq.v;+q;+k;if(M.datap.rowN.dataq.row)/第一个稀疏矩阵行列数大于第二个稀疏矩阵行数Q.datak.row=N.dataq.row;Q.datak.col=N.dataq.col;Q.datak.v=-N.dataq.v;+q;+k;while(p/处理M的每一行for(p=1;pmaxsize)return;Q.dataQ.tu.row=arow;/行数Q.dataQ.tu.col=ccol;/列数Q.dataQ.tu.v=ctempccol;/累加非零元素值coutcout>choice;switch(choice)case'A':creat(A);break;case'B':creat(B);break;case'C':addsmatrix(A,B);break;case'D':subsmatrix(A,B);break;case'E':multsmatrix(A,B,Q);break;case'F':exit(0);cout