稀疏矩阵(实验报告).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文档。上传文档
查看更多

《数据结构课程设计》实验报告

编号

实验一

实验项目名称

稀疏矩阵

学时数

6

指导教师

冯韵

班级

O8计科系2班

学号

13

姓名

周枚

实验日期

2010-9-21至2010-9-28

成绩

一、实验目的:

理解稀疏矩阵的加法运算,掌握稀疏矩阵的存储方法,即顺序存储的方式,利用顺序存储的特点——每一个元素都有一个直接前驱和一个直接后继,完成相关的操作。

二、内容与设计思想:

1、设计思想

主界面的设计

定义两个矩阵a=00300000b=02000000

0000005000040000

0000000000000600

0000700000008000

0000000000100000

0900000000000000

定义两个数组A和B,用于存储矩阵a和矩阵b的值;定义一个数组C,用于存放数组A和数组B相加后的结果。

实现方式

稀疏矩阵的存储比较浪费空间,所以我们可以定义两个数组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的值。

主要数据结构

稀疏矩阵的转存算法:

voidCreateMatrix(intA[m][n],intB[50])

{

inti,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;

}

稀疏矩阵的加法实现:

3、主要算法结构分析:

1)voidCreateMatrix(intA[m][n],intB[50]),这是一个将稀疏矩阵转存的函数,类似于顺序存储三元组表。在这个方法中,只要用一个二重循环来判断每个矩阵元素是否为零,若不为零,则将其行、列下标及其值存入到一维数组B中对应的元素。在定义函数的过程中,我们需要定义一个for循环,以完成行和列的转换及存储。在函数的末尾我们定义一个B[K]=-1,用于结束非零元素的存储。

2)voidMatrixAdd(intA[max],intB[max],intC[max]),这个函数用于实现数组A和数组B的相加,并将其相加的结果存入数组C。这个函数讨论了数组在相加的过程中的几种情况:

a、A数组和B数组的行相等且列相等,两者直接相加后存入数组C中。

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;

}

}

b、A的列小于B的列,将A的三个元素直接存入C中

if(A[i+1]B[j+1])

{

C[k]=A[i];

C[k+1]=A[i+1];

C[k+2]=A[i+2];

k=k+3;

i=i+3;

}

c、B的列小于A的列,将B的三个元素直接存入C中

if(A[i+1]B[j+1])

{

C[k]=B[j];

C[k+1]=B[j+1];

C[k+2]=B[j+2];

k=k+3;

j=j+3;

}

d、A的行小于B的行,将A的三个元素直接存入C中

if(A[i]B[j])

{

C[k]=A[i];

C[k+1]=A

文档评论(0)

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

个人介绍

1亿VIP精品文档

相关文档