ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:99.29KB ,
资源ID:8855154      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8855154.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计稀疏矩阵运算器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计稀疏矩阵运算器.docx

1、数据结构课程设计稀疏矩阵运算器成绩评定教师签名嘉应学院 计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班 级:指导老师:实验题目:稀疏矩阵运算器学 号:姓 名:上机时间:【实验目的】深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。【需要分析】稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。要求以带“行逻辑链接信息”的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入以三元组表示,输出以通常的阵列形式列出。【软件平台】Windows 20

2、00,Visual C 6.0或WINTC【概要设计】ADT Array 数据对象: D = aij | 0ib1-1, 0 jb2-1数据关系: R = ROW, COL ROW = | 0ib1-2, 0jb2-1 COL = | 0ib1-1, 0 jb2-2 基本操作:CreateSMatrix(&M); /操作结果:创建稀疏矩阵M.Print SMatrix(M); /初始化条件: 稀疏矩阵M存在./操作结果:输出稀疏矩阵M.AddSMatrix(M,N,&Q);/初始化条件: 稀疏矩阵M与N的行数和列数对应相等./操作结果:求稀疏矩阵的和Q=M+N.SubSMatrix(M,N,&

3、Q);/初始化条件: 稀疏矩阵M与N的行数和列数对应相等./操作结果:求稀疏矩阵的差Q=M-N.MultSMatrix(M,N,&Q);/初始化条件: 稀疏矩阵M的列数等于N的行数./操作结果:求稀疏矩阵的乘积Q=M*N. ADT Array 【主程序模块】:void main() 初始化;do 接受命令; 处理命令;while(命令!=“退出”);【功能模块调用关系图】 【详细设计】 typedef structint row; /行数int col; /列数int v; /非零元素值triplenode;typedef structtriplenode datamaxsize+1; /非零

4、元三元组int rowtabmaxrow+1; /各行第一个非零元的位置表int mu,nu,tu; /矩阵的行数、列数和非零元个数rtripletable;void creat(rtripletable &A) /创建稀疏矩阵void print(rtripletable A) /输出稀疏矩阵int addsmatrix(rtripletable M, rtripletable N) /矩阵相加int subsmatrix(rtripletable M, rtripletable N) /稀疏矩阵相减void multsmatrix(rtripletable M, rtripletable

5、N, rtripletable &Q) /稀疏矩阵相乘【调试分析】1、由于开始对顺序存储的知识还不熟识,在三元组的存储和运用会导致算法低效。2、做到存储的时候,开始时不知道怎样存储三元组,和不知如何去运用它的行数,列数,非零元素。3、在使用选择和循环时,有时因为自己的粗心,把循环的条件弄错了。4、做本程序用到了数组的知识,有时一有不懂的东西又只能打开书来看。5、开始时没有把矩阵的加法和减法的情况考虑全面,导致输出的时候会出现简单的错误。【用户手册】1、本程序的运行环境为Windows me下的Microsofe VC+ 6.0,执行文件为:xishujuzhen.cpp。2、进入演示程序后即显

6、示文本方式的用户界面:3、进入界面后,只要选择数字命令按“回车键”就行。4、接受其他命令后即执行相应的操作和相应的结果。完整代码如下:#include#include#include#define maxsize 100#define maxrow 100#define OK 1#define ERROR -1typedef structint row; /行数int col; /列数int v; /非零元素值triplenode;typedef structtriplenode datamaxsize+1; /非零元三元组int rowtabmaxrow+1; /各行第一个非零元的位置表in

7、t mu,nu,tu; /矩阵的行数、列数和非零元个数rtripletable;void creat(rtripletable &A) /创建稀疏矩阵int k=1,sum=1,loop,p,t;int nummaxrow+1;cout请输入矩阵的行数和列数:endl;coutA.mu;coutA.nu;coutA.tu;cout请按行,列和值的形式输入该矩阵的非零元.并以全零为结束标记!endl;for(loop=1;loopA.dataloop.rowA.dataloop.colA.dataloop.v; /输入三元组的行数,列数和非零元素值for(p=1;p=A.mu;p+) nump=

8、0; /A三元组每一列的非零元素个数for(t=1;t=A.tu;t+) +numA.datat.row; /求A中每一列含非零元个数A.rowtab1=1; /求第p列中第一个非零元在A.data中的序号for(t=2;t=A.mu;t+) A.rowtabt=A.rowtabt-1+numt-1;return;void print(rtripletable A) /输出稀疏矩阵int resultmaxrow+1maxrow+1; /定义一个二维数组int loop1,loop2;for(loop1=1;loop1=A.mu;loop1+)for(loop2=1;loop2=A.nu;lo

9、op2+)resultloop1loop2=0; /初始化为0for(loop1=1;loop1=A.tu;loop1+)resultA.dataloop1.rowA.dataloop1.col=A.dataloop1.v;for(loop1=1;loop1=A.mu;loop1+)cout|;for(loop2=1;loop2=A.nu;loop2+)coutresultloop1loop2; /输出所做运算的结果cout|endl;int addsmatrix(rtripletable M, rtripletable N) /矩阵相加 if(M.mu!=N.mu) /行数相等才能相加cou

10、t出错;rtripletable Q;Q.mu=M.mu;Q.nu=N.nu;int p,q,k;p=1;q=1;k=1;while(p=M.tu&q=N.tu) /两个稀疏矩阵存在if(M.datap.row=N.dataq.row) /两个稀疏矩阵的行数相等if(M.datap.col=N.dataq.col) /两个稀疏矩阵的列数相等 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

11、;else if(M.datap.colN.dataq.col) /第一个稀疏矩阵列数小于第二个稀疏矩阵列数Q.datak=M.datap; /把M中的所有信息都赋给Q +p;+k;else /第一个稀疏矩阵列数大于第二个稀疏矩阵的列数Q.datak=N.dataq;+q;+k;else if(M.datap.rowN.dataq.row) /第一个稀疏矩阵行列数小于第二个稀疏矩阵行数Q.datak=M.datap;+p;+k;else /第一个稀疏矩阵行列数小于第二个稀疏矩阵行数Q.datak=N.dataq;+q;+k;while(p=M.tu) /只有M并且符合条件Q.datak=M.d

12、atap;+p;+k;while(q=N.tu) /只有N并且符合条件Q.datak=N.dataq;+q;+k;Q.tu=k-1;cout加法结果为:endl;print(Q); /调用print()return OK;int subsmatrix(rtripletable M, rtripletable N) /稀疏矩阵相减if(M.mu!=N.mu) /行数相等才能相加cout出错;rtripletable Q;Q.mu=M.mu;Q.nu=N.nu;int p,q,k;p=1;q=1;k=1;while(p=M.tu&q=N.tu) /两个稀疏矩阵存在if(M.datap.row=N.

13、dataq.row) /两个稀疏矩阵的行数相等if(M.datap.col=N.dataq.col) /两个稀疏矩阵的列数相等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; if(M.datap.colN.dataq.col) /第一个稀疏矩阵列数大于第二个稀疏矩阵的列Q.datak.row=N.dataq.row;Q.datak.col=N.dataq.col;Q.datak.v=

14、-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.tu) /只有M并且符合条件Q.datak=M.datap;+p;+k;while(q=N.tu) /只有N并且符合条件Q.datak.row=N.dataq.row;Q.datak.col=N.dataq.col;Q.datak.v=-N.dataq.v;+q;+k;Q.tu=k-1;cout减

15、法结果为:endl;print(Q); /调用print()return OK; void multsmatrix(rtripletable M, rtripletable N, rtripletable &Q) /稀疏矩阵相乘int arow,brow;int p,q,tp,t;int ccol;int ctempmaxrow+1; /定义累加器if(M.nu!=N.mu)return;Q.mu=M.mu;Q.nu=N.nu;Q.tu=0; /Q初始化if(M.tu*N.tu!=0) /Q是非零矩阵for(arow=1;arow=M.mu;arow+) /处理M的每一行for(p=1;p=Q

16、.nu;p+) /处理M的每一列ctempp=0; /当前行各元素累加器清零Q.rowtabarow=Q.tu+1;if(arowM.mu) tp=M.rowtabarow+1;else tp=M.tu+1;for(p=M.rowtabarow;ptp;+p) /对当前行中每一个非零元brow=M.datap.col; /找到对应元N中的行号if(browN.nu) t=N.rowtabbrow+1;else t=N.tu+1;for(q=N.rowtabbrow;qt;+q)ccol=N.dataq.col; /乘积元素在Q中列数ctempccol+=M.datap.v*N.dataq.v;

17、 /求得Q中第crow(=arow)行的非零元for(ccol=1;ccolmaxsize)return ;Q.dataQ.tu.row=arow; /行数 Q.dataQ.tu.col=ccol; /列数Q.dataQ.tu.v=ctempccol; /累加非零元素值cout乘法结果为:endl;print(Q); /调用print() void main()char choice; rtripletable A,B,Q;cout- n;cout|*欢迎使用稀疏矩阵运算器*| n;cout|=|n;coutn | A、输入矩阵1 | n;coutn | B、输入矩阵2 | n;coutn | C、矩阵相加 | n;coutn | D、矩阵相减 | n;coutn | E、矩阵相乘 | n;coutn | F、退出本系统 | n;coutn|-| n;coutchoice;switch(choice)caseA:creat(A);break;caseB:creat(B);break;caseC:addsmatrix(A,B);break;caseD:subsmatrix(A,B);break;caseE:multsmatrix(A,B,Q);break;caseF:exit(0);cout请选择所需要的操作功能(A,B,C,D,E,F):;while(1);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1