1、 实验课程名称 数据结构与课程设计 专 业 班 级 10 级计科(2)班 学 生 姓 名 学 号 指 导 教 师 2012 至 2013 学年第 1 学期第 4 至 5 周 目录 1 概述. - 1 - 1 系统分析. 错误错误! !未定义书签。未定义书签。 2.1 设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值 . - 1 - 2.2 造函数并输出最终稀疏矩阵 1 3 概要设计 1 3.1 存储结构设计 1 3.2 系统功能设计 1 4 详细设计. - 2 - 4.1 稀疏矩阵的存储 - 2 - 4.2 稀疏矩阵的加法 . 2 5 程序代码. - 4 - 6 运行与测试. - 7 - 7
2、总结与心得 7 8 参考文献 7 - 1 - 1 1 概述概述 掌握稀疏矩阵的加法运算,稀疏矩阵的存储方法,每一个元素可能有多个直接前驱和多个 直接后继。一般情况下都是采用顺序存储方法来表示数组,但有时在实际应用中,一般的顺序 存储方法已经不太实用。有时候用普通存储方法就会造成很大的空间浪费。为了节省存储单元, 用压缩方法只存储非零元素。 2 2 系统分析系统分析 2.12.1 设计函数建立稀疏矩阵及初始化设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值值和输出稀疏矩阵的值 本模块要求设计函数建立稀疏矩阵并初始化。在创建稀疏矩阵时需要设计稀疏矩阵的加法 和存储方法,出现错误时能够对错误进行判别
3、处理初始化稀疏矩阵都为空值。在设计输出稀疏 矩阵的值的函数时也要针对两种不同的情况分别编制函数才能准确的输出稀疏矩阵。在对稀疏 矩阵进行初始化时只输入非零元素的值和它所在的所在行及所在列。在对稀疏矩阵输出时以矩 阵的完整形式输出。 2.22.2 造函数并输出最终稀疏矩阵造函数并输出最终稀疏矩阵 本模块要求设计加法函数对两个矩阵进行运算并输出最终的稀疏矩阵,操作后的结果矩阵 的行、列数需要综合多方面情况来确定。这些函数也是整个程序的难点需要灵活运用数组及指 针的特点。 3 3 概要设计概要设计 3.13.1 存储结构设计存储结构设计 以一维数组顺序存放非零元素的行号、列号和数值,行号-1 作为结
4、束标志。稀疏矩阵的存 储类似于建立顺序存储稀疏矩阵的三元组表。假设 A 为一个稀疏矩阵,B 为一个存储对应于 A 矩阵生成的数组。用一个二重循环来判断每个矩阵元素是否为零,若不为零,则将其行、列下 标及其值存入到一维数组 B中对应的元素中。 3.23.2 系统功能设计系统功能设计 设计稀疏矩阵的加法算法,假设两个稀疏矩阵 A 和 B,它们均为 m 行 n 列,分别存放在数组 A 和 B 中,编写矩阵的加法实现 C=A+B 的算法,C 矩阵存放在数组 C 中。根据设计要求,首先要将一 个稀疏矩阵对应存储到一个一维数组中,然后在进行矩阵加法时依次扫描矩阵 A 和 B 的行列值, - 2 - 并以行
5、优先,当行列相同时,将第三个元素值相加的和以及行列号三个元素存入结果数组 C 中; 不相同时,将 A 或 B 的三个元素直接存入结果数组中。 4 4 详细设计详细设计 4.1 4.1 稀疏矩阵的存储稀疏矩阵的存储 void(CreateMatrix(int Amn,int B50) /转储稀疏矩阵的算法 int i,j,k=0; for(i=0;im;i+) for(j=0;jn;j+) if(Aij!=0) Bk=i;k+; Bk=j;k+; Bk=Aij;k+; Bk=-1; /非零元素存储结束 4.2 4.2 稀疏矩阵的加法稀疏矩阵的加法 void MatrixAdd(int Amax,
6、int Bmax,int Cmax) int i=0,j=0,k=0; while(Ai!=-1 Ck+1=Ai+1; Ck+2=Ai+2-Bj+2; k=k+3; i=i+3; j=j+3; else if(Ai+1Bj+1) /B 的列小于 A 的列,将 A 的三个元素直接存入 C 中 Ck=Ai; Ck+1=Ai+1; Ck+2=Ai+2; - 3 - k=k+3; i=i+3; else /B 的列小于 A 的列,将 B 的三个元素直接存入 C 中 Ck=Bj; Ck+1=Bj+1; Ck+2=Bj+2; k=k+3; j=j+3; else if(AiBj) /A 的行小于 B 的行,将 A 的三个元素直接存入