三元组表相加Word格式文档下载.docx

上传人:b****3 文档编号:6493408 上传时间:2023-05-06 格式:DOCX 页数:15 大小:178.04KB
下载 相关 举报
三元组表相加Word格式文档下载.docx_第1页
第1页 / 共15页
三元组表相加Word格式文档下载.docx_第2页
第2页 / 共15页
三元组表相加Word格式文档下载.docx_第3页
第3页 / 共15页
三元组表相加Word格式文档下载.docx_第4页
第4页 / 共15页
三元组表相加Word格式文档下载.docx_第5页
第5页 / 共15页
三元组表相加Word格式文档下载.docx_第6页
第6页 / 共15页
三元组表相加Word格式文档下载.docx_第7页
第7页 / 共15页
三元组表相加Word格式文档下载.docx_第8页
第8页 / 共15页
三元组表相加Word格式文档下载.docx_第9页
第9页 / 共15页
三元组表相加Word格式文档下载.docx_第10页
第10页 / 共15页
三元组表相加Word格式文档下载.docx_第11页
第11页 / 共15页
三元组表相加Word格式文档下载.docx_第12页
第12页 / 共15页
三元组表相加Word格式文档下载.docx_第13页
第13页 / 共15页
三元组表相加Word格式文档下载.docx_第14页
第14页 / 共15页
三元组表相加Word格式文档下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

三元组表相加Word格式文档下载.docx

《三元组表相加Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《三元组表相加Word格式文档下载.docx(15页珍藏版)》请在冰点文库上搜索。

三元组表相加Word格式文档下载.docx

3程序实现

3.1程序实现时应考虑的问题

3.2主要源代码及说明

#include<

iostream>

iomanip>

usingnamespacestd;

#defineOK1

#defineERROR0

constintMAXSIZE=100;

//定义非零元素的最多个数

typedefstruct//定义三元组元素

{

intr,c;

//矩阵的行号和列号

intv;

//矩阵元素值

}Triple;

typedefstruct//定义普通三元组对象

Tripledata[MAXSIZE+1];

introws,cols,nzeroNums;

//行数、列数、非零元素个数

}TSMatrix;

template<

classT>

boolInputTSMatrix(T&

M,inty)

cout<

<

"

输入矩阵的行数、列数和非零元素个数:

;

cin>

>

M.rows>

M.cols>

M.nzeroNums;

请输入非零元素对应的行号、列号和相应的元素值:

<

endl;

for(inti=1;

i<

=M.nzeroNums;

i++)

{

M.data[i].r>

M.data[i].c>

M.data[i].v;

}

returntrue;

}

template<

boolOutputSMatrix(TM)

inti,j,k=1;

for(i=0;

M.rows;

for(j=0;

j<

M.cols;

j++)

if((M.data[k].r-1)==i&

&

(M.data[k].c-1)==j)

setw(4)<

M.data[k].v;

k++;

else

0"

}//end_j

}//end_i

//两个稀疏矩阵的加法

intAddMatrix(TSMatrixM,TSMatrixN,TSMatrixQ)

//求采用三元组顺序表存储表示的稀疏矩阵M和N的和,,结果赋给矩阵Q

if((M.rows<

=0)||(M.cols<

=0)||(M.nzeroNums<

0)||(N.rows<

=0)||(N.cols<

=0)||(N.nzeroNums<

0))

returnERROR;

if(M.rows!

=N.rows||M.cols!

=N.cols)

Q.rows=M.rows;

Q.cols=M.cols;

Q.nzeroNums=0;

intx=0,y=0;

for(inti=1;

i<

=Q.rows;

i++)

for(intj=1;

j<

=Q.cols;

j++)

for(intp=1;

p<

=M.nzeroNums;

p++)

if((i==M.data[p].r)&

(j==M.data[p].c))

{

x=M.data[p].v;

break;

elsex=0;

}//forp

for(intq=1;

q<

=N.nzeroNums;

q++)

if((i==N.data[q].r)&

(j==N.data[q].c))

y=N.data[q].v;

}

elsey=0;

}//forq

if((x+y)!

=0)

Q.data[Q.nzeroNums+1].r=i;

Q.data[Q.nzeroNums+1].c=j;

Q.data[Q.nzeroNums+1].v=x+y;

Q.nzeroNums++;

}//if

}//forj

}//fori

cout<

"

加法结果是:

\n"

OutputSMatrix(Q);

returnOK;

//得到矩阵元素M[i][j]的值

intvalue(TSMatrixM,inti,intj)

intk;

for(k=1;

k<

k++)

if(M.data[k].r==i&

M.data[k].c==j)

returnM.data[k].v;

return0;

//矩阵乘法的算法

intMultMat(TSMatrixA,TSMatrixB,TSMatrixC)

inti,j,k,temp=0,p=1;

if(A.cols!

=B.rows)

矩阵A的列数不等于矩阵B的行数不能相乘!

for(i=1;

=A.rows;

for(j=1;

=B.cols;

temp=0;

=A.cols;

temp+=value(A,i,k)*value(B,k,j);

//矩阵元素累积相加

if(temp!

=0)//如果不等以0,则将行号和列号存到C的三元组中。

C.data[p].r=i;

C.data[p].c=j;

C.data[p].v=temp;

p++;

C.rows=A.rows;

//将A的行数赋给C的行数

C.cols=B.cols;

//将B的列数赋给C的列数

C.nzeroNums=p-1;

cout<

输出两个稀疏矩阵的积:

OutputSMatrix(C);

//输出相乘后的结果

return1;

voidsaveA(TSMatrixD)

{FILE*fp;

inti;

if((fp=fopen("

1.txt"

"

wb"

))==NULL)

{printf("

cannotopenfile\n"

);

return;

for(i=0;

D.nzeroNums;

if(fwrite(&

D.data[i],sizeof(Triple),1,fp)!

=1)

printf("

filewriteerror\n"

fclose(fp);

voidsaveB(TSMatrixD)

2.txt"

voidsaveC(TSMatrixD)

3.txt"

voidmain()

{TSMatrixA,B,C,D;

InputTSMatrix(A,1);

OutputSMatrix(A);

saveA(A);

InputTSMatrix(B,1);

OutputSMatrix(B);

saveB(B);

MultMat(A,B,D);

AddMatrix(A,B,C);

saveC(C);

4测试

4.1测试结果及分析

经过检验测试,结果正确!

5小结

5.1本问题解决方法及程序实现小结

利用数组的顺序存储结构,实现特殊矩阵的压缩存储和稀疏矩阵的三元组存储和加法实现,利用稀疏矩阵的三元组存储,运用矩阵相乘的标准法进行编程序,来实现两矩阵相乘。

经过测试,程序运行结果完全正确!

5.2尚未解决的问题及下一步工作思路

1.两个稀疏矩阵未能成功的分别用两个文件存放,相加后的矩阵未能成功的存入一个文件。

2.相乘算法未能减少时间复杂度,我现在有的是标准法三重循环,实际上可以用二重循环也就可以的了。

3.以后尽量减少循环次数,也就是减少时间复杂度。

6参考文献

[1]朱战力.数据结构.电子工业出版社.2010.11

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2