西北工业大学数据结构试验报告DS03西北工业大学数据结构试验报告DS03.docVIP

  • 20
  • 0
  • 约8.01千字
  • 约 16页
  • 2017-04-23 发布于贵州
  • 举报

西北工业大学数据结构试验报告DS03西北工业大学数据结构试验报告DS03.doc

《数据结构》实验报告 题目要求 有输入界面(图形或文字界面都可),能区分加法、减法、乘法和转置;能处任意输入的典型数据和进行出错数据处理(例如乘法,当第一个矩阵的列数不等于第二个矩阵的行数时);必须采用三元组作存储结构,不能采用数组等形式;输出要求用矩阵的形式输出(即习题集136页的形式),当第一个矩阵的行数不等于第二个矩阵的行数时,注意如第三个乘法的形式输出 算法实现 在本次实验中,算法比较简单,所涉及的函数比较少,一共有:创建稀疏矩阵、输出稀疏矩阵、矩阵的乘法、矩阵的加法、矩阵的减法、矩阵的转置。因为是稀疏矩阵要求以三元组的方式输入,节约了很多时间和空间,只需输入行列下标和非零元即可。在输出矩阵时,通常以方阵的形式输出。 基本操作: CreateSMatrix(M); //操作结果:创建稀疏矩阵M. Print SMatrix(M); //初始化条件: 稀疏矩阵M存在. //操作结果:输出稀疏矩阵M. AddSMatrix(M,N,Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的和Q=M+N. SubSMatrix(M,N,Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的差Q=M-N. MultSMatrix(M,N,Q); //初始化条件: 稀疏矩阵M的列数等于N的行数. //操作结果:求稀疏矩阵的乘积Q=M*N. TransposeSMatrix(M ,Q); //初始化条件:存在稀疏矩阵M //操作结果:将稀疏矩阵行列互换输出。 功能模块调用关系图 主程序模块 创建稀疏矩阵模块 调用矩阵运算模块 输出矩阵方阵模块 详细设计 稀疏矩阵运算器 矩阵加法 矩阵减法 矩阵乘法 矩阵转置 输入矩阵M 输入矩阵N 输出运算结果 输入矩阵M 输入矩阵N 输出运算结果 输入矩阵M 输入矩阵N 输出运算结果 输入矩阵M 输出运算结果 1、元素类型 typedef struct{ int i,j;//该非零元素的列下标和行下标 ElemType e; }Triple; typedef struct{ Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用 int mu,nu,tu; }TSMatrix; 2、矩阵运算器 void AddSMatrix(M ,N , Q) void SubSMatrix(M ,N , Q) void MultSMatrix(M ,N , Q) void TransposeSMatrix(M ,T) 调试分析 此程序的算法结构比较???单,只要理解了三元组,设计矩阵运算器的方法很简单。 在设计算法的过程中对于矩阵的输出有一定的困扰,三元组的输入给我们节约了时间和储存空间,但是对于把三元组的形式转化为方阵的形式输出有一定的困难。 在矩阵运算方面的算法比较简单,调试的过程中遇到的困难比较小。 由于稀疏矩阵的内容比较好理解,调用的函数也比较简单,所以此次实验的算法在设计中比较顺利。但是在刚开始设计的时候对加法和减法的把握不是很好,出现了一点错误。 用户操作说明 本实验在vc++6.0上编译 输出界面 选择需要的运算并输入矩阵三元组 输入第二个矩阵如上所示 输出运算结果 源代码 #includestdio.h #includestring.h #includemath.h #define MAXSIZE 12500 typedef int ElemType; typedef struct { int row,col; ElemType e; }Triple; typedef struct { Triple data[MAXSIZE]; int m,n,t; }TriTable; void AddSMatrix(TriTable *A,TriTable *B,TriTable *C) //矩阵的加法 { int i,j,k; if(A-m!=B-m||A-n!=B-n) { printf(错误); return; } C-m=A-m; C-n=A-n; C-t=0; if(A-t==0B-t==0) return; i=j=k=1; while(i=A-tj=B-t) { if(A-data[i].rowB-data[j].row) { C-data[k]=A-data[i]; i++; k++; } else { if(A-dat

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档