首页 课程设计模板

课程设计模板

举报
开通vip

课程设计模板巢湖学院信息工程学院课程设计报告课程名称《数据结构》课题名称稀疏矩阵的实现与应用专业网络工程班级16网工二班学号姓名联系方式指导教师刘波2016年6月13日目录11、数据结构课程设计任务书11.1、题目11.2、要求12、总体设计12.1、功能模块设计12.2、所有功能模块的流程图13、详细设计13.1、程序中所采用的数据结构及存储结构的说明23.2、算法的设计思想23.3、稀疏矩阵各种运算的性质变换24、调试与测试:24.1、调试方法与步骤:34.2、测试结果的分析与讨论:34.3、测试过程中遇到的主要问题及采取...

课程设计模板
巢湖学院信息工程学院课程设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 课程名称《数据结构》课题名称稀疏矩阵的实现与应用专业网络工程班级16网工二班学号姓名联系方式指导教师刘波2016年6月13日目录11、数据结构课程设计任务书11.1、题目11.2、要求12、总体设计12.1、功能模块设计12.2、所有功能模块的流程图13、详细设计13.1、程序中所采用的数据结构及存储结构的说明23.2、算法的设计思想23.3、稀疏矩阵各种运算的性质变换24、调试与测试:24.1、调试方法与步骤:34.2、测试结果的分析与讨论:34.3、测试过程中遇到的主要问题及采取的解决措施:45、时间复杂度的分析:46、源程序清单和执行结果87、C程序设计总结88、致谢89、参考文献1、数据结构课程设计任务书1.1、题目实现三元组,十字链 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 下的稀疏矩阵的加、转、乘的实现。1.2、要求(1)设计函数建立稀疏矩阵,初始化值;(2)设计函数输出稀疏矩阵的值;(3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵;(4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵;(5)构造函数进行稀疏矩阵的转置,并输出结果;(6)退出系统。2、总体设计2.1、功能模块设计:2.2、所有功能模块的流程图3、详细设计1、定义程序中所有用到的数据及其数据结构,及其基本操作的实现;3.1、程序中所采用的数据结构及存储结构的说明ADTSparseMatrix{数据对象:D={aij|i=1,2,….,m;j=1,2,…,n;Aij∈Elemset,m和n分别称为矩阵的行数和列数。}数据关系:R={Row,Col}Row={<ai,j,ai,j+1>|1<=i<=m,1<=j<=n-1}Col={<ai,j,ai+1,j>|1<=i<=m-1,1<=j<=n}基本操作:CreateSMatrix($M);操作结果:创建稀疏矩阵M.DestroySMatrix($M);初始条件:稀疏矩阵M存在。操作结果:销毁稀疏矩阵M.PrintSMatrix(M);初始条件:稀疏矩阵M存在。操作结果:输出稀疏矩阵M.AddSMatrix(M,N,$Q);初始条件:稀疏矩阵M和N的行数和列数对应相等操作结果:求稀疏矩阵的和Q=M+N.MultSMatrix(M,N,$Q);初始条件:稀疏矩阵M的列数等于N的行数。操作结果:求稀疏矩阵乘积Q=M*N.TransposeSMatrix(M,$T);初始条件:稀疏矩阵M存在。操作结果:求稀疏矩阵M的转置矩阵T。}ADTSparseMatrix3.2、算法的设计思想本实验要求在三元组,十字链表下实现稀疏矩阵的加、转、乘。首先要进行矩阵的初始化操作,定义三元组和十字链表的元素对象。写出转置,加法,乘法的操作函数。通过主函数调用实现在一个程序下进行矩阵的运算操作。3.3、稀疏矩阵各种运算的性质变换a)加法运算两个稀疏矩阵的加和矩阵仍然是稀疏矩阵b)乘法运算两个稀疏矩阵的乘积矩阵不是稀疏矩阵c)转置运算一个稀疏矩阵的转置矩阵仍然是稀疏矩阵4、调试与测试:4.1、调试方法与步骤:1.实际完成的情况说明(完成的功能,支持的数据类型等);完成了稀疏矩阵的建立,初始化及输出值的操作。实现三元组,十字链表下的稀疏矩阵的加法,乘法以及转置运算。2.程序的性能分析,包括时空分析;能应对一般小的错误输入,如果复杂则自动退出程序。3.上机过程中出现的问题及其解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ;1.起始有错误,设定的变量名相同。经检查,改正。2.一些逻辑错误。经讨论改正。运行出现部分语法错误修正。4.程序中可以改进的地方说明;程序在运行中一旦出现矩阵数据 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 错误如输入汉字,则程序自动退出。需要重新启动。更新程序对更多错误输入情况的分析能力。5.程序中可以扩充的功能及设计实现假想。对退出操作的扩充在主菜单下,用户输入4回车选择退出程序是,询问是否真的退出系统,如果是,则即退出系统,否则显示……continue……并且返回主菜单。为了方便由于误按导致程序退出。在退出时可以增加一段感谢使用本程序的结束语。4.2、测试结果的分析与讨论:系统运行主界面输入需要执行的操作3矩阵的乘法5、时间复杂度的分析:a)加法运算由于两矩阵行列相等,故时间复杂度为O(行*列)b)乘法运算设M是m1*n1矩阵,N是m2*n2矩阵,则时间复杂度是O(m1*n1*n2)c)转置运算时间复杂度和原矩阵的列数及非零元的个数的乘积成正比,即O(mu*nu)6、源程序清单和执行结果#include<iostream>#include<iomanip>Usingnamespacestd;ConstintMAXSIZE=100;//定义非零元素的对多个数ConstintMAXROW=10;//定义数组的行数的最大值#include<malloc.h>#defineMAXSIZE100/*假设非零元个数的最大值为20*/typedefstruct{inti,j;inte;}Triple;//定义三元组的元素typedefstruct{Tripledata[MAXSIZE+1];/*非零元三元组表,data[0]未用*/intmu,nu,tu;}TSMatrix;//定义普通三元组对象Typedefstruct{Tripledata[MAXSIZE+2];Intrpos[MAXROW+1];Intmu,nu,tu;}RLSMatrix;//定义带连接信息的三元组对象TypedefstructOLNode{//定义十字链表元素IntI,j;Inte;StructOLNode*right,*down;//该非零元素所在行表和列表的后继元素}OLNode,*OLink;//定义十字链表元素Typedefstruct{//定义十字链表对象结构体OLink*rhead,*chead;Intmu,nu,tu;//系数矩阵的行数,列数,和非零元素个数}CrossList;//定义十字链表对象结构体Template<classP>BoolinputTSMatrix(P$T,inty){//输入矩阵,按三元组格式输入抽屉<<”输入矩阵的行,列和非零元素个数:”<<endi;cin>>T.mu>>T.nu>>T.tu;Cout<<”请输入非零元素的位置和值:”<<endi;for(intk=1;k<=T.tu;k++)Cin>>T.data[k].i>>T.data[k].j>>T.data[k].e;Returntrue;}Template<clasp>BoolOutPutSMatrix(PT){Intm,n,,k=1;For(m=0;m<T.mu;m++){For(n=0;n<T.nu;n++){If((T.data[k].i-1)==m$$(T.data[k].j-1)==n){cout.width(4);Cout.width(4);Cout<<T.data[k++].e;}else{Cout.width(4);Cout<<”0”;}}Cout<<endi;}Returntrue;}//输出矩阵,按 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 格式输出BoolTransposeSMatrix()//求矩阵的转置矩阵{}TSMatrixM,T;//定义预转置的矩阵InPutTSMatrix(M,0);//输入矩阵Intnum[MAXROW+1];Intcpot[MAXROW+1];//构建辅助数组Intq,p,t;T.tu=M.tu;T.mu=M.nu;T.nu=M.mu;if(T.tu){for(intcol=1;col<=M.nu;col++)num[col]=0;for(t=1;t<=M.tu;t++)++num[M.data[t].j];Cpot[1]=1;for(inti=2;i,=M.nu;i++)cpot[i]=cpot[i-1]+num[i-1];//求每一列中非零元素在三元组中出现的位置for(p=1;p<=M.tu;p++){Intcool-M.data[p].j;q=cpot[col];T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e;++cpot[col];}}cout<<”输入矩阵的转置矩阵为”<<endl;OutPutSMatrix(T);Returntrue;}BoolCount(RLSMatrix&T){Intnum[MAXROW+1];for(introw=1;row<=T.mu;row++)num[row]=0;for(intcol=1;col<=T.tu;col++)++num[T.data[col].i];T.rpos[1]=1;for(inti=2;i<=T.mu;i++)T.rpos[i]=T.rpos[i-1]+num[i-1];//求每一行中非零元素在三元组中出现的位置returntrue;}boolMultSMatrix()//两个矩阵相乘{RLSMatrixM,N,Q;//构建三个带”链接信息”的三元组表示的数组InPutTSMatrix(M,1);//用普通三元组形式输入数组InPutTSMatrix(M,1);Count(M);Count(N);cout<<”输入的两矩阵的乘矩阵为:”《《endl;If(M.nu!=N.mu)returnfalse;Q.mu=M.mu;Q.nU=n.NU;Q.tu=0;//Q初始化Intctemp[MAXROE+1];//辅助数组Intarow,tp,p,brow,t,q,cool;If(M.tu*N.t.tu)//Q是非零矩阵{For(arow=1;arow<=M.mu;arow++){///memset(ctemp,0,N.nu);for(intx=1;x<=N.nu;x++)//当前各种元素累加器清零Ctemp[x]=0;Q.rpos[arow]=Q.tu=1;//当前行的首个非零元素在三元组的位置委此前所有非零元素+1If(arow<M.mu)tp=M.rpos[arow+1];elsetp=M.tu+1;for(p=M.rops[arow];p<tp;p++)//对当前行每个非零元素进行操作{brow=M.data[p].j;//在N中找到i值也操作元素的j值相等的行If(brow<N.mu)t=N.rpos[brow+1];elset=N.tu+1;for(q=N.rops[brow];q<t;q++)//对找出的行当每个非零元素进行操作{ccol=N.data[q].j;Ctemp[cool]+=M.data[p].e*N.data[q].e;//将乘得到对应值放在相应的元素累加器里面}}for(ccol=1;ccol<=Q.nu;ccol++)//对已经求出的累加器中的值压缩到Q中If(ctemp[ccol]){If(++Q.tu>MAXSIZE)returnfalse;Q.data[Q.tu].e=ctemp[ccol];Q.data[Q.tu].i=arow;Q.data[Q.tu].j=ccol;}}}OutPutSMatrix(Q);returntrue;}boolCreateSMatrix_OL(CrossList&M)//创建十字链表{Intx,y,m;cout<<”请输入矩阵的行,列,及非零元素个数”《《end;cin>>M.nu>>M.nu>>M.nu>>M.tu;If(!(M.rthead=(OLink*)malloc((M.mu+1)*sizeof(OLink))))exit(0);If(!(M.cthead=(OLink*)malloc((M.mu+1)*sizeof(OLink))))exit(0);for(x=0;x<=M.nu;x++)M.rherad[x]=NULL;//初始化各行,列头指针,分别为NULLfor(x=0;x<=0;x<=M.nu;x++)M.cherad[x]=NULL;Cout<<”请按三元组的格式输入数组:”<<endl;for(int=1;i<=M.tu;i++){Cin>>x>>y>>m;//按任意顺序输入非零元,(普通三元组形式输入)OLinkp,q;If(!(p=(OLink)malloc(sizeof(OLNode))))exit(0);//开辟新节点,用来存储输入的新元素p->i=x;P->i=y;P->e=m;If(M.rhead[x]==NULL||M.rhead[x]->j>y){P->right=M.rhead[x];M.rhead[x]=p;}else{for(q=M.rhead[x];(q->right)&&(q->right->j<y);q=q->right);//查找节点在行表中的插入位置p->right=q->right;q->right=p;//完成行插入}If(M.chead[y]==NULL||M.chead[y]->i>x){p->down=M.chead[y];M.chead[y]=p;}else{p->down=M.chead[y];M.chead[y]=p;}else{for(q=M.chead[y];(q->down)&&(q->down->i<x);q=q->down);//查找节点在列表中的插入位置P->down=q->down;q->down=p;//完成列插入}}returntrue;}boolOutPutSMatrix_OL(CrossLisrT)//输出十字链表,用普通数组形式输出{for(inti=1;i<=T.mu;i++){OLinkp=T.rhead[i];for(intj=1;j<=T.nu;j++){If((p)&&(j==p->j)){cout<<setw(3)<<”0”;}Cout<<endl;}returntrue;}boolAddSMatrix()//矩阵的加法{CrossListM,N;//创建两个十字链接对象,并初始化CreateSMatrix_OL(M);CreateSMatrix_OL(N);Cout<<”输入的两矩阵的和矩阵为:”<<endl;OLinkpa,pb,pre,hl[MAXROW]+1];//定义辅助指针,pa,pb分别为M,N当前比较的元素,pre为pa的前驱元素for(intx=1;x<=M.nu;x++)h[x]=M.chead[x];for(intk=1;k<=M.nu;k++)//对M的每一行进行操作{pa=M.rhead[k];pb=N.rhead[k];pre=NULL;while(pb)//把N中此行的每个元素取出{OLinkp;If(!(p=(OLIink)malloc(sizeof(OLNode))))exit(0);//开辟新节点,存储N中取出的元素P->e=pb->e;P->j-pb->i;P->j=pb->j;If(NULL==pa||pa->j>pb->j)//当M此行已经检查完成或者pb因该放在pa前面{If(NULL==pre)M.rhead[p->j]=p;elsepre->right=pa;pre=p;If(NULL==M.chead[p->j])//进行列插入{m.chead[p->j]=p;p->down=NULL;}else{p->down=hl[p->j]->down;Hl[p->j]->down=p;}hl[p->j]=p;pb=pb->right;}elseIf((NULL!=pa)&&pa->j<pb->j)//如果此时的pb元素因该放在pa后面,则去以后的pa再来比较{pre=pa;pa=pa->right;}elseIf(pa->j==pb->j)//如果pa,pb位于同一个位置上,则将值相加{pa->e+=pb->e;If(!pa->e){//如果相加后的和为0,则删除此节点,同时改变此元素坐在列,列的前驱元素的相应值If(NULL==pre)M.rhead[pa->i]=pa->ringht;elsepre->right=pa->right;p=pa;pa=pa->right;if(M.chead[p->j]==p)M.chead[p->j]=hl[p->j]=hl[p->j]=p->down;//修改列前驱元素值else{pa=pb->right;pb=pa->right;}}}}}outPutSMatrix_OL(M);returntrue;}Intmain(){Intt;cout.fill(‘*’);cout<<setw(80)<<’*’;cout.fill(‘*’);cout<<setw(50)<<’*’;cout.fill(‘*’);cout<<setw(80)<<’*’;cout.fill(‘*’);cout<<”请选择要进行的操作:”<<endl;cout<<”1:矩阵的置换。”<<endl;cout<<”2:矩阵的加法。”<<endl;cout<<”3:矩阵的乘法。”<<endl;cout<<”4:退出程序。”<<endl;While(t){cout<<”请输入您要进行的操作:”<<endl;cin>>t;switch(t){case1:TransposeSMatrix();//调用矩阵转置函数break;case2:AddSMatrix();//调用矩阵相加函数break;case3:MultSMatrix();//调用矩阵相乘函数break;Case4:t=0;break;}}return0;}V7、C程序设计总结课设即将结束。这两周自从开始确定了命题,首先开始搜集资料,然后初步编程,修改代码,到最终完成代码,这是一个学习的过程,一个知识升华的过程。我想课设的意义就在于此吧。让我们将知识应用于实际,将理论得以实践。刚开始选定了命题感觉没有方向,不知道学籍管理要怎样开始,后来通过查阅资料,认真的研究,慢慢的有了大体的思路,然后就开始建立程序模板,将大体代码输入,慢慢的有了“形状”,又经过一些错误的改正,细节的修改和最后的完善,最终程序完成了。现在,一切都结束了,感觉这个命题条理还算清晰。通过这次的教学实习我们了解了理论与实践相结合的重要性。我们应该将做放在想的前面,多做多想,而不是只想不做。我们应该多将我们的思想放于实践,这样我们只能得到更多,而不会失去什么。当然课设也有很多的不足,由于刚学完数据结构没多久,因此没有建立一个系统的知识框架,在编程时大体上还是延续C的思路,并没有过多的采用数据结构在算法和效率上进行优化,这是此次最大的不足,也将会是今后学习的重点。当然,我的成功也离不开大家的帮助,所以,在此我要感谢给于过我帮助的指导老师和热心的同学们,谢谢大家,我也会继续努力。8、致谢能够完成这次课程设计必须感谢C语言课程老师刘波、亲爱的同学(她们帮我修改了几处重要错误,同时启发我完善了该程序的功能)。9、参考文献[1]贾宗璞、许合利,C语言程序设计,江苏:中国矿业大学出版社,2007.6[2]谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1[3]http://www.baidu.com输入矩阵1矩阵相加输入矩阵2计算结果矩阵相减输入矩阵1输入矩阵2计算结果矩阵转置输入矩阵计算结果退出开始CrosslistM,N;CreateSMatrix_OL(M);CreateSMatrix_OL(N);对应位置相加输出结果结束开始RLSMatrixm,N,Q;InPutTSMatrix(M,I);INPutTSMatrix(N,I);Intctemp[MAXROW+1];Intarrow,tp,p,brow,t,q,cool;Q.mu=M.mu;Q.nu=N.nu;Q.tu=0;实现矩阵的相乘结束开始TSMatrixM,T;InPutTSMatrix(M,O);Intnum[MAXROW+1];Intcpot[MAXROW+1];T.tu=M.tu;T.mu=M.nu;T.nu=M.muT.tu是实现转置OUtPutSMatrix(T)结束开始输出界面IntI;输入iiTransposeSMatrix();AddSMatrix();MultSMatrix();结束第1页
本文档为【课程设计模板】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
河源大咖
资深教育工作者
格式:doc
大小:669KB
软件:Word
页数:16
分类:工学
上传时间:2019-01-27
浏览量:12