- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
稀疏矩阵运算器
一:问题描述:
稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行储存和计算可以大大节省储存空间,提高计算效 率。实现一个能进行称稀疏矩阵基本运算的运算器。
基本要求:
以带逻辑链接信息的三元组顺序表表示稀疏矩阵,实现矩阵相加,相减,相乘的运算。稀疏矩阵的输入形式 采用三元组表示。而运算结果的矩阵则用通常的阵列形式列出。
测试数据:
10
0
0
0
0 0
10
0
0
0
0
9
+ 0
0 -1
=0
0
9
-1
0
0
1
0 -3
0
0
-3
10
0
0
0
10
0
0
9
+ 0
-1
=0
10
-1
0
1
-3
-2
3
3
0
0
4
-3
0 0
1
4
2
0
0
-6
0
0
0
0 8
0
* 0
1
0 =
8
0
0
0
0
1 0
0
1
0
0
0
1
0
0
0
0 0
70
0
0
0
0
0
0
二概要设计:
int CreateSMatrix(TSMatrix M)
操作结果:创建矩阵M
void DestroySMatrix(TSMatrix M)
初始条件:矩阵M存在
操作结杲:销毁矩阵M;
void PrintSMatrix(TSMatrix M)
初始条件:矩阵M存在
操作结果:打卬矩阵M
int AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix Q) 初始条件:矩阵M,N,Q存在
操作结果:矩阵M,N,相加并储存于矩阵Q
int XSMatrix(TSMatrix M,TSMatrix N,TSMatrix Q)
初始条件:矩阵M,N,Q存在
操作结果:矩阵M,N,相减并储存于矩阵Q
int MultSMatrix(TSMatrix M, TSMatrix N, TSMatrix Q) 初始条件:矩阵M,N,Q存在
操作结果:矩阵M,N,相乘并储存于矩阵Q
三,详细程序
#include stdafx.h
#include stdio.hH
#include ”stdlib.h”
#define MAXSIZE 100//非零元个数的最大值
struct Triple
{
int i,j; //行下标,列下标
int e; //非零元素值
};
struct TSMatrix
{
Triple data[MAXSIZE+l];
int rpos[MAXSIZE+1 ];// 非零元三元组表,data[0] 未用
int mu,nu,tu; //矩阵的行数、列数和非零元个数
};
// bo5-2.cpp三元组稀疏矩阵的基本操作,包括算法 5.1(9 个)
int CreateSMatrix(TSMatrix M)
{ //创建稀疏矩阵M
int i,m,n;
int e;
int k;
printfC*请输入矩阵的行数,列数,非零元素数:“);
scanf(n%d,%d,%d,M.mu,M.nu,M.tu);
M.data[0].i=0; //为以下比较顺序做准备
for(i= 1 ;i=M.tu;i++)
{
do
{
printfC*请按行序顺序输入第%(1个非零元素所 在的行(l?%d),列(l?%d),元素值:”,iMmuMnu);
scanf(” %d,%d,%d”,m,n,e);
k=0;
if(ml||mM.mu||nl||nM.nu) // 彳亍或列超出
范围
k=l;
if(mM.datafi-1 ].i||m==M.datafi-1 ].in 二M.daki[i? 1 ].j) //行或列的顺序有错
k=l;
}while(k);
M.data[i].i=m;
M.data[i].j=n;
M.data[i].e=e;
}
return 1;
}
void DestroySMatrix(TSMatrix M)
{ //销毁稀疏矩阵M
M.mu=0;
M.nu=0;
M.tu=0;
void PrintSMatrix(TSMalrix M)
{ //输出稀疏矩阵M
int i;
printf(H%d 行%d 列%d 个非零元素。
\nf\M.mu,M.nu,M.tu);
printf(行列元素值\n“);
for(i=l ;i=M.tu;i++)
printf(,%2d%4d%8d\n,,,M.dataLi].i,M.data[i].j,M.data[i].
e);
}
int comp(intcl,int c2) // 另力口
{ // AddSMatrix函数要用到
int i;
if(clc2)
i=l;
else if(cl==c2)
i=0;
else
i=-l;
return i;
}
int AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix Q)
原创力文档


文档评论(0)