您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > 实验报告----数据结构课程设计稀疏矩阵的应用
稀疏矩阵的应用数学与计算机学院课程设计说明书课程名称:数据结构课程设计课程代码:6014279题目:稀疏矩阵的应用年级/专业/班:2010级软件工程2班学生姓名:尹龙海学号:312010080611228开始时间:2011年12月08日完成时间:2011年12月16日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书(计算书、图纸、分析报告)撰写质量(45)总分(100)指导教师签名:年月日稀疏矩阵的应用数据结构课程设计任务书学院名称:数学与计算机学院课程代码:__8404181______专业:软件工程(Web方向)年级:2010级2班一、设计题目稀疏矩阵应用二、主要内容主要完成稀疏矩阵的加、转、乘的实现。三、具体要求及应提交的材料以三元组、十字链表为存储形式,分别实现两个稀疏矩阵的加法运算、两个稀疏矩阵的乘法运算,以及对任意稀疏矩阵的转置运算。稀疏矩阵要求可为键盘录入的任意矩阵。用C/C++语言编程实现上述内容,对每个问题写出一个算法实现,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:1)课程设计说明书打印稿一份2)课程设计说明书电子稿一份;3)源程序电子文档一份。四、主要技术路线提示注意合理地设计三元组及十字链表,结合稀疏矩阵的压缩存储方式和特点,将每一功能模块以函数形式分别实现。在此基础上用C/C++实现其操作。五、进度安排按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:稀疏矩阵的应用序号设计内容天数1分析问题,给出数学模型,选择数据结构22设计算法,给出算法描述13给出源程序清单24编辑、编译、调试源程序25编写课程设计报告3总计10六、推荐参考资料[1]严蔚敏,吴伟民.数据结构.清华大学出版社出版。[2]严蔚敏,吴伟民.数据结构题集(C语言版).清华大学出版社.2003年5月。[3]唐策善,李龙澎.数据结构(作C语言描述).高等教育出版社.2001年9月[4]朱战立.数据结构(C++语言描述)(第二版本).高等出版社出版.2004年4月[5]胡学钢.数据结构(C语言版).高等教育出版社.2004年8月[6]徐孝凯等著.数据结构(C语言描述).清华大学出版社.2004指导教师签名日期年月日系主任审核日期年月日稀疏矩阵的应用目录摘要………………………………………………………………………………5引言………………………………………………………………………………51需求分析………………………………………………………………………62概要设计………………………………………………………………………63详细设计………………………………………………………………………84调试分析………………………………………………………………………155用户使用说明…………………………………………………………………156测试结果………………………………………………………………………157结论……………………………………………………………………………19致谢………………………………………………………………………………20参考文献…………………………………………………………………………21稀疏矩阵的应用摘要本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘等操作,最后输出运算后的结果。考虑到难易程度,先用三元组实现稀疏矩阵的输入,输出,及其转置,相加,相乘等操作的方法,再在十字链表下实现。程序通过调试运行,结果与预期一样,初步实现了设计目标。关键词:程序设计;稀疏矩阵;三元组;十字链表引言1.1课程设计任务本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。稀疏矩阵采用三元组和十字链表表示,并在两种不同的存储结构下,求两个稀疏矩阵A和B的和为矩阵C,并输出C;求出A的转置为矩阵D,输出D;求两个稀疏矩阵A和B的相乘为矩阵E,并输出E。1.2课程设计性质数据结构课程设计是重要地实践性教学环节。在进行了程序设计语言课和《数据结构》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。本课程设计是数据结构中的一个关于稀疏矩阵的算法的实现,包括在三元组和十字链表下存储稀疏矩阵,并对输入的稀疏矩阵进行转置,相加,相乘等操作,最后把运算结果输出。此课程设计要求对数组存储结构和链表存储结构非常熟悉,并能熟练使用它们。1.3课程设计目的其目的是让我们在学习完C++、数据结构等课程基础上,掌握多维数组的逻辑结构和存储结构、掌握稀疏矩阵的压缩存储及转置,相加,相乘等操作,并用不同的方法输出结果,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。稀疏矩阵的应用需求分析2.1设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值本模块要求设计函数建立稀疏矩阵并初始化,包括在三元组结构下和十字链表结构下。在创建稀疏矩阵时,需要设计两个不同的函数分别在三元组和十字链表下创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值。在设计输出稀疏矩阵的值的函数时,也要针对两种不同的情况,分别编制函数,才能准确的输出稀疏矩阵。在对稀疏矩阵进行初始化时,只输入非零元素的值和它所在的所在行及所在列。在对稀疏矩阵输出时,以矩阵的完整形式输出。2.2构造函数进行稀疏矩阵的转置并输出结果本模块要求设计函数进行稀疏矩阵的转置并输出转置后的结果。在编写函数时,要先定义一个相应的结构体变量用于存放转置后的矩阵,最后把此矩阵输出。2.3构造函数进行两稀疏矩阵相加、减及相乘并输出最终稀疏矩阵本模块要求设计相加、减和相乘函数对两个矩阵进行运算,并输出最终的稀疏矩阵,定义相应的矩阵类型用于存放两个矩阵操作后的结果矩阵,这个结果矩阵的行、列数需要综合多方面情况来确定。这些函数也是整个程序的难点,需要灵活运用数组及指针的特点。2.4退出系统本模块要求设置选项能随时结束程序的运行,本程序中采用do-while循环。程序在计算机上显示“提示信息”之后,由用户在键盘上输入演示程序中需要的相关信息及命令。概要设计3.1存储结构设计三元组结构体定义:structmat{inti;//非零元素的行位置intj;//非零元素的列位置intv;//非零元素的值稀疏矩阵的应用};classsqmatrix{private:intm;//矩阵的行数intn;//矩阵的列数intt;//矩阵中非零元素的个数matdata[max];//三元组表intrpos[max];//存储矩阵中第max行以前所有非零元素的个数public:};十字链表结构体定义:typedefstructOLNode{inti,j;//该非零元的行、列下标inte;//非零元值structOLNode*right,*down;//该非零元所在行表和列表的后继元素}OLNode,*OLink;//定义十字链表对象结构体typedefstruct{OLink*rhead,*chead;//OLink类型结点数组inta,b,c;//系数矩阵的行数,列数,和非零元素个数}CrossList;3.2系统功能设计本系统除了要完成分别在三元组存储结构以及在十字链表下实现稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的建立及初始化在三元组存储结构下,由函数voidcreat()实现,在十字链表存储结构下,由函数voidCreateSMatix_OL(CrossList&M)依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。(1)稀疏矩阵的转置:此功能在三元组存储结构下,有两种方法:按行转置和按列转置,分别由函数sqmatrixtransmatone()和sqmatrixtransmattwo()实现,在十字链表存储结构下,由函数voidzhuanzhi()实现。当用户选择该功能,系统提示用户初始化一个矩阵,然后进行转置,最终输出结果。稀疏矩阵的应用(2)稀疏矩阵的加法:此功能在三元组存储结构下,由函数voidadd(sqmatrixa,sqmatrixb)实现,在十字链表存储结构下,由函数voidadd()实现。当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。(3)稀疏矩阵的乘法:此功能在三元组存储结构下,由函数voidcheng(sqmatrixa,sqmatrixb)实现。在十字链表存储结构下,由函数voidchengfa()实现。当用户选择该功能,系统提示输入要进行相乘的两个矩阵的详细信息。然后进行相乘,最后得到结果。(4)退出:即退出稀疏矩阵的应用系统,由switch语句实现。当用户选择相应序号,则退出该稀疏矩阵的应用系统。详细设计4.1数据类型定义三元组结构体定义:structmat{inti;//非零元素的行位置intj;//非零元素的列位置intv;//非零元素的值};classsqmatrix{private:intm;//矩阵的行数intn;//矩阵的列数intt;//矩阵中非零元素的个数matdata[max];//三元组表intrpos[max];//存储矩阵中第max行以前所有非零元素的个数public:};十字链表结构体定义:稀疏矩阵的应用typedefstructOLNode{inti,j;//该非零元的行、列下标inte;//非零元值structOLNode*right,*down;}OLNode,*OLink;typedefstruct{OLink*rhead,*chead;//OLink类型结点数组inta,b,c;//系数矩阵的行数,列数,和非零元素个数}CrossList;4.2系统主要子程序详细设计A.主程序模块设计:采用一个do-while语句执行各个功能的操作循环,并用switch语句控制选择三元组或十字链表进行相关的操作,在采用的操作界面中,再用switch语句控制各功能的实现,主要代码如下:do{coutendl;cout\n***稀疏矩阵应用***endlendl;cout\n请你选择创建稀疏矩阵的方法endl;cout\n1、用三元组创建稀疏矩阵endl;cout\n2、用十字链表创建稀疏矩阵endl;cout\n3、退出程序endlendl;cout请选择:;cink;coutendl;switch(k){case1:{cout欢迎进入《三元组操作》矩阵系统endlendl;switch(kk){case1:两矩阵求和}break;case2:{两矩阵相乘}break;case3:{矩阵按行转置}break;case4:{矩阵按行转置}break;case5:{退出该程序}break;}coutendl;}break;稀疏矩阵的应用case2:{cout欢迎进入《十字链表操作》矩阵系统endlendl;switch(kk){case1:{两矩阵求和}break;case2:{两矩阵相乘}break;case3:{两矩阵相减}break;case4:{矩阵转置}break;case5:{退出该程序}break;}coutendl;}break;}}while(k==1||k==2);coutendl;return0;}B.稀疏矩阵操作各子函数的定义:(1)建立与初始化稀疏矩阵:采用三元组建立稀疏矩阵,输入非零元素的行号、列号和值,关键代码如下:cout行号i列号j非零元素值vendl;for(intp=0;pt;p++){cout;cinii;data[p].i=ii;cout;cinjj;data[p].j=jj;cout
本文标题:实验报告----数据结构课程设计稀疏矩阵的应用
链接地址:https://www.777doc.com/doc-6057828 .html