数据结构-基于三元组表实现稀疏矩阵的基本操作-课程设计-实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据结构课程设计本课程设计已调试通过,请放心使用。请到:道客巴巴或豆丁网充值购买word版,省打字,直接修改即可,价格较便宜,在这里百度较贵!搜索:数据结构_基于三元组表实现稀疏矩阵的基本操作_课程设计_实验报告设计题目:基于三元组表压缩存储实现稀疏矩阵操作课题名称基于三元组表实现稀疏矩阵的基本操作院系年级专业学号姓名成绩课题设计目的与设计意义1、课题设计目的:其目的是让我们在学习完C、数据结构等课程基础上,掌握多维数组的逻辑结构和存储结构、掌握稀疏矩阵的压缩存储及转置,相加,相减等基本操作。为进一步的应用开发打好基础。2、课题设计意义:空非零元素分布没有规律,在存储非零元素的同时还要存储辅助信息,才能确定非零元素的位置,利用稀疏矩阵大大节省存储空间。指导教师:年月日目录一、实验目的及意义....................................................................................................11.1实验目的.........................................................................................................11.2实验意义.........................................................................................................1二、需求分析................................................................................................................12.1设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值..........................12.2构造函数进行稀疏矩阵的转置并输出结果.................................................12.3构造函数进行两稀疏矩阵相加、减及相乘并输出最终稀疏矩阵..............12.4退出系统..........................................................................................................2三、项目设计................................................................................................................23.1设计思路...........................................................................................................23.2模块图...............................................................................................................33.3流程图..............................................................................................................4四、系统实现................................................................................................................44.1主调函数建立...............................................................................................44.2矩阵建立.........................................................................................................54.3稀疏矩阵相加,相减,转置的算法..............................................................6五、系统调试............................................................................................................125.1输出................................................................................................................125.2相加................................................................................................................135.3相减...............................................................................................................135.4转置................................................................................................................14六、实验总结............................................................................................................14七、附录.......................................................................................................................141一、实验目的及意义1.1实验目的1)了解多维数组存储方式和存储特点。2)熟悉稀疏矩阵的存储方式。3)用三元组法实现稀疏矩阵的转置、相加、相减的操作。1.2实验意义空非零元素分布没有规律,在存储非零元素的同时还要存储辅助信息,才能确定非零元素的位置,利用稀疏矩阵大大节省存储空间。二、需求分析2.1设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值本模块要求设计函数建立稀疏矩阵并初始化,包括在三元组结构下和十字链表结构下。在创建稀疏矩阵时,需要设计两个不同的函数分别在三元组和十字链表下创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值。在设计输出稀疏矩阵的值的函数时,也要针对两种不同的情况,分别编制函数,才能准确的输出稀疏矩阵。在对稀疏矩阵进行初始化时,只输入非零元素的值和它所在的所在行及所在列。在对稀疏矩阵输出时,以矩阵的完整形式输出。2.2构造函数进行稀疏矩阵的转置并输出结果本模块要求设计函数进行稀疏矩阵的转置并输出转置后的结果。在编写函数时,要先定义一个相应的结构体变量用于存放转置后的矩阵,最后把此矩阵输出。2.3构造函数进行两稀疏矩阵相加、减及相乘并输出最终稀疏矩阵本模块要求设计相加、减和相乘函数对两个矩阵进行运算,并输出最终的稀疏矩阵,定义相应的矩阵类型用于存放两个矩阵操作后的结果矩阵,这个结果矩阵的行、列数需要综合多方面情况来确定。这些函数也是整个程序的难点,需要灵活运用数组及指针的特点。22.4退出系统本模块要求设置选项能随时结束程序的运行,本程序中采用do-while循环。程序在计算机上显示“提示信息”之后,由用户在键盘上输入演示程序中需要的相关信息及命令。三、项目设计3.1设计思路及方案3.11设计思路1)主界面的设计定义两个矩阵a=100b=100020020003003定义两个数A和B,用于存储矩阵A和矩阵B的值;定义一个数组C,用于存放数组A和数组B相加后的结果。2)实现方式稀疏矩阵的存储比较浪费空间,所以我们可以定义两个数组A,B,采用压缩存储的方式来对上面的两个矩阵进行存储。具体的方法是,将非零元素的值和它所在的行号、列号作为一个结点存放在一起,这就唯一确定一个非零元素的三元组(i、j、v)。将表示稀疏矩阵的非零元素的三元组按行优先的顺序排列,则得到一个其结点均为三元组的线性表。即:以一维数组顺序存放非零元素的行号、列号和数值,行号-1作为结束标志。例如,上面的矩阵a,利用数组A存储后内容为:A[0]=0,A[1]=2,A[2]=3,A[3]=1,A[4]=6,A[5]=5,A[6]=3,A[7]=4,A[8]=7,A[9]=5,A[10]=1,A[11]=9,A[12]=-1同理,用数组B存储矩阵b的值3)主要算法结构分析voidCreateMatrix(intA[m][n],intB[50]),这是一个将稀疏矩阵转存的函数,类似于顺序存储三元组表。在这个方法中,只要用一个二重循环来判断每个矩阵元素是否为零,若不为零,则将其行、列下标及其值存入到一维数组B中对应的元素。在定义函数的过程中,我们需要定义一个for循环,以完成行和列的转换及存储。在函数的末尾我们定义一个B[K]=-1,用于结束非零元素的存储。voidMatrixAdd(intA[max],intB[max],intC[max]),这个函数用于实现数组A和数组B的相加,并将其相加的结果存入数组中。33.2模块图基于三元组表的存储结构实现稀疏矩阵的基本操作建立主调函数创建三元组表创建矩阵矩阵相加减矩阵转置输出43.3流程图四、系统实现4.1主调函数建立将稀疏矩阵的非零元素按行或列顺序排列,得到一个节点均是三元组的线性表。我们将该线性表称为三元组表。三元组结构类型为Tripe,用i表示元素的行,j表示元素的列,v表示元素输入D输入A开始减法运算用户选择转置运算加法运算显示结果等待用户输入结束运算继续计算NY5值。稀疏矩阵的结构类型为TSpmatrix,用数组data[]表示三元组,m表示行数,n表示列数,t表示非零元个数。有如下类型说明:#definesmax100typedefintdatatype;typedefstruct{inti,j;datatypev;}node;typedefstruct{intm,n,t;nodedata[smax];}spmatrix;4.2矩阵建立voidcreat(spmatrix*a){intk;printf(请输入矩阵的行数、列数、非零元素个数\n);scanf(%d%d%d,&a-m,&a-n,&a-t);printf(请输入非零元素所在的行号、列号、非零元素的值\n);for(k=0;ka-t;k++)scanf(%d%d%d,&a-data[k].i,&a-data[k].j,&a-data[k].v);}voidprint(spmatrix*a){int;for(k=0;ka-t;k++)printf(%d\t%d\t%d\n,a-data[k].i,a-data[k].j,a-data[k].v);}voidprintjuzhen(spmatrix*a){intk,p,;intc[5][5]={{0},{0},{0},{0},{0}};

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功