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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验.docx

1、数据结构实验滨江学院数据结构 课程设计题 目 稀疏矩阵运算器 院 系 理学系 年级班级 2012级信息与计算科学学生姓名 顾杨 学 号 20122314007 学 期 2014-2015(一) 任课教师 黄 群 二一四年 十二月 十 日1 引 言 本次课程设计的目的是深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。2 需求分析1本演示程序中,矩阵的行列人为规定,由个人输入需要计算的矩阵,首先选择自己需要计算方式,在输入所需要计算的矩阵,程序将根据选择进行计算,最后输出结果。2演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应数据(所需

2、计算矩阵的行列数及矩阵内个元素),程序将自动将稀疏矩阵保存在三元标中。3程序执行的命令包括:(1)构建三元列表;(2)输入所需计算矩阵的行列数;(3)输入矩阵内的全部元素(4)根据选择进行矩阵计算(5)输出矩阵4测试数据(1)a.mu=3 a.nu=3, 1 0 1 2 0 0 0 2 1b.mu b.nu 0 1 2 1 1 1 1 0 2加法输出:1 1 3 减法输出: 1 -1 -1 乘法输出: 1 1 4 3 1 1 1 -1 -1 0 0 0 1 2 3 -1 2 -1 3 0 23 概要设计为了实现上述操作,应以单向循环链表为存储结构。1input(&b) 基本操作: 以此输入稀疏

3、矩阵内每个元素 操作结果:建立三元列表b,并想稀疏矩阵内输入数据addmtirx( &a, &b, &c); 初始条件:存在两个不为空稀疏矩阵和一个空的三元列表操作结果 :将两个稀疏矩阵相加,并将得数存储在c中transposesmatrix(&a,&b);初始条件:存在一个不为空稀疏矩阵和一个空的三元列表操作结果 :将含有数据的稀疏矩阵转置,并将得数存储在b中multmatrix(&a,&b,&c); 初始条件:存在两个不为空稀疏矩阵和一个空的三元列表操作结果 :将两个稀疏矩阵相乘,并将得数存储在c中submtirx(&a,&b,&c) 初始条件:存在两个不为空稀疏矩阵和一个空的三元列表操作

4、结果 :将两个稀疏矩阵相加减,并将得数存储在c中Out put ( ) 初始条件:存放稀疏矩阵三元列表存在 操作结果:输出计算后的稀疏矩阵2 本程序包含三个模块:(1)主程序模块;(2)输入需要计算的稀疏矩阵(3)选择计算方法,并计算(4)输出计算后的矩阵(5)模块调用图: 主程序模块输入需要计算的稀疏矩阵选择计算方法,并计算输出计算后的矩阵4 详细设计1元素类型,列表类型和指针类型:# include#include #define maxsize 100typedef int datatype;typedef struct/定义三元组 int i,j; datatype x;matrix;

5、typedef struct/定义三元组表 matrix datamaxsize; int mu,nu,tu;/矩阵行,列,非零元个数tripulematrix;2每个模块的分析:(1)主程序模块:void main() printf(-矩 阵 计 算-n); printf(请选择你需要的计算方式n); printf(-1.稀疏矩阵的转置-n); printf(-2.稀疏矩阵的加法-n); printf(-3.稀疏矩阵的减法-n); printf(-4.稀疏矩阵的乘法-n); printf(-5.退 出-n); char x; scanf(%c,&x); tripulematrix a,b,c

6、; switch(x) case 1: /tripulematrix a,b; printf(请输入矩阵的行数与列数n); scanf(%d%d,&a.mu,&a.nu); b.mu=a.mu; b.nu=a.nu; printf(请输入一个矩阵,例如:n); printf(1 2 3n2 3 4n4 5 6n); printf(请输入n); input(&a); transposesmatrix(&a,&b); output(&b); break; case 2: / tripulematrix a,b,c; printf(请输入矩阵的行数与列数n); scanf(%d%d,&a.mu,&a

7、.nu); b.mu=a.mu; b.nu=a.nu; printf(请输入两个矩阵,例如:n); printf(1 2 3n2 3 4n4 5 6n); printf(请输入n); printf(请输入第一个矩阵n); input(&a); printf(请输入第二个矩阵n); input(&b); addmtirx( &a, &b, &c); output(&c); break; case 3: /tripulematrix a,b,c; printf(请输入矩阵的行数与列数n); scanf(%d%d,&a.mu,&a.nu); b.mu=a.mu; b.nu=a.nu; printf(

8、请输入两个矩阵,例如:n); printf(1 2 3n2 3 4n4 5 6n); printf(请输入n); printf(请输入第一个矩阵n); input(&a); printf(请输入第二个矩阵n); input(&b); submtirx(&a,&b,&c); break; case 4: /tripulematrix a,b,c; printf(请输入矩阵的行数与列数n); scanf(%d%d,&a.mu,&a.nu); b.mu=a.mu; b.nu=a.nu; printf(请输入两个矩阵,例如:n); printf(1 2 3n2 3 4n4 5 6n); printf(

9、请输入第一个矩阵n); input(&a); printf(请输入第二个矩阵n); input(&b); multmatrix(&a,&b,&c); break; case 5: exit(0); break; system(pause); (2)输入数据void input (tripulematrix *a) int i,j ,k=0; datatype x; for (i=0;imu;i+) for (j=0;jnu;j+) scanf(%d,&x); if (x)/如果是非零元 a-datak.i=i; a-datak.j=j; a-datak.x=x; k+; a-tu=k;/inp

10、ut(3)加法datatype addmtirx(tripulematrix *a,tripulematrix *b,tripulematrix *c) int k=0,l=0; c-mu=a-mu; c-nu=a-nu; c-tu=0; while (ktu<u) if (a-datak.i=b-datal.i)&(a-datak.j=b-datal.j) int temp=a-datak.x+b-datal.x; if (temp!= 0) c-datac-tu.x=a-datak.x+b-datal.x; c-datac-tu.i=a-datak.i; c-datac-tu.j=a-

11、datak.j; c-tu+; k+;l+; else if (a-datak.i=b-datal.i)&(a-datak.jdatal.j) c-datac-tu.x=a-datak.x; c-datac-tu.i=a-datak.i; c-datac-tu.j=a-datak.j; c-tu+; k+; else if (a-datak.i=b-datal.i)&(a-datak.jb-datal.j)|(a-datak.ib-datal.i) c-datac-tu.i=b-datal.i; c-datac-tu.j=b-datal.j; c-datac-tu.x=b-datal.x; c

12、-tu+; l+; while(ktu) c-datac-tu.x=a-datak.x; c-datac-tu.i=a-datak.i; c-datac-tu.j=a-datak.j; c-tu+; k+; while(ltu) c-datac-tu.i=b-datal.i; c-datac-tu.j=b-datal.j; c-datac-tu.x=b-datal.x; c-tu+; l+; return (1);(4)减法datatype submtirx(tripulematrix *a,tripulematrix *b,tripulematrix *c)/减法 int k=0,l=0;

13、c-mu=a-mu; c-nu=a-nu; c-tu=0; while (ktu<u) if (a-datak.i=b-datal.i)&(a-datak.j=b-datal.j) /int temp=a-datak.x-b-datal.x; /if (temp!= 0) / c-datac-tu.x=a-datak.x-b-datal.x; c-datac-tu.i=a-datak.i; c-datac-tu.j=a-datak.j; c-tu+; / k+;l+; else if (a-datak.i=b-datal.i)&(a-datak.jdatal.j)|(a-datak.ida

14、tal.i) c-datac-tu.x=a-datak.x; c-datac-tu.i=a-datak.i; c-datac-tu.j=a-datak.j; c-tu+; k+; else if (a-datak.i=b-datal.i)&(a-datak.jb-datal.j)|(a-datak.ib-datal.i) c-datac-tu.i=b-datal.i; c-datac-tu.j=b-datal.j; c-datac-tu.x=-b-datal.x; c-tu+; l+; while(ktu) c-datac-tu.x=a-datak.x; c-datac-tu.i=a-data

15、k.i; c-datac-tu.j=a-datak.j; c-tu+; k+; while(ltu) c-datac-tu.i=b-datal.i; c-datac-tu.j=b-datal.j; c-datac-tu.x=-b-datal.x; c-tu+; l+; return (1);(5)转置int transposemartix(tripulematrix *a,tripulematrix *b) int col,p,q; b-mu=a-nu; b-nu=a-mu; b-tu=a-tu; if(b-tu) q=0; for(col=0;colnu;col+) for(p=0;ptu;

16、p+) if(a-datap.j=col) b-datap.i=a-dataq.j; b-datap.j=a-dataq.i; b-datap.x=a-dataq.x; q+; return (1);/稀疏矩阵的转置算法(六)乘法int multmatrix(tripulematrix *a,tripulematrix *b, tripulematrix *c) int rpos1maxsize,rpos2maxsize,nummaxsize,rpos3maxsize; int row1,row2,arow,tp,t,brow,ccol,p,q,k; int ctempmaxsize; if

17、(a-tu) for (row1=0;row1mu;row1+) numrow1=0; for(row1=0;row1tu;row1+) +numa-datarow1.i; rpos10=0; for(row1=1;row1mu;row1+) rpos1row1=rpos1row1-1+numrow1-1; if (b-tu) for (row2=0;row2tu;row2+) numrow2=0; for(row2=0;row2tu;row2+) +numb-datarow2.i; rpos20=0; for(row2=1;row2mu;row2+) rpos2row2=rpos2row2-

18、1+numrow2-1; c-mu=a-mu;c-nu=b-nu;c-tu=0; if(a-tu*b-tu != 0) for (arow=0;arowmu;arow+) for(k=0;ktu+1; if (arowmu-1) tp=rpos1arow+1; else tp=a-tu; for (p=rpos1arow;pdatap.j;/找到对应元在b中的行号 if (brownu-1) t=rpos2brow+1; else t=b-tu; for (q=rpos2brow;qdataq.j;/乘积元素在Q中的列号 ctempccol += (a-datap.x)*(b-dataq.x)

19、; for(ccol=0;ccolnu;ccol+) if (ctempccol) if (c-tumaxsize) return 0; c-datac-tu.i=arow; c-datac-tu.j=ccol; c-datac-tu.x=ctempccol; c-tu+; return 1;(4)函数调用关系图main()input(&a);transposesmatrix(&a,&b); submtirx(&a,&b,&c);addmtirx( &a, &b, &c);multmatrix(&a,&b,&c);output(); 5 程序使用说明及测试结果1程序使用说明(1)本程序的运行环

20、境为VC6.0。(2)进入演示程序后即显示提示信息:-矩 阵 计 算-请选择你需要的计算方式-1.稀疏矩阵的转置-2.稀疏矩阵的加法-3.稀疏矩阵的减法-4.稀疏矩阵的乘法-5.退 出-1请输入矩阵的行数与列数3 3请输入一个矩阵,例如:1 2 31 1 11 1 1得出: 1 1 1 2 1 1 3 1 1请按任意键继续. . . 3调试中的错误及解决办法。(1) 转置出现问题(2) 输出时无法利用数组第一个空间(3) 三元表定义是无rpos(每行第一个非零元位置)解决方式:逐步调试,以及问同学,自己更改算法,计算出rpos6 致谢经过1个月的忙碌和努力,此次论文设计也将基本完成。作为一个本

21、科生的论文,由于我自身经验的匮乏及学识所限,不可避免仍有许多疏忽错漏的细节。如果没有导师的督促指点,以及一起研究的同学们的支持和鼓励,完成这次毕业设计就将是愚公移山,断不可行。在此次论文写作过程中,老师对我的亲切关怀和耐心指导尤其激励着我。她恭肃的学术态度,严谨的治学精神,认真专注的工作作风,给我留下深刻的印象并成为我今后学习生活的目标。从最初的选择课题到最终完成论文,老师都始终非常耐心的指导和帮助我。 衷心感谢各位老师在百忙中评阅本论文,并提出了宝贵意见。本文引用了数位学者的研究文献,正是各位学者的研究成果才启发我完成了本篇论文的写作。 由于我的个人水平局限,这篇论文难免有不足之处,恳请各位老师批评指正!

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

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