数据结构与课程设计---稀疏矩阵.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与课程设计---稀疏矩阵

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

文档评论(0)

sanshengyuan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档