- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
稀疏矩阵运算器
一.实验目的
使读者能深入研究数组的存储表示和实现技术
二.实验内容
【问题描述】稀疏矩阵是指那些多数元素为零的矩阵,利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。
【基本要求】以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的陈列形式列出。 【实现提示】
1、首先应先输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求做的运算是否相匹配,可设矩阵的行数和列数不超过20;
2、程序可以对三元组的输入顺序加以限制,例如,按行优先。
3、在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放。
三.实验步骤(可选)
#include #include #include using namespace std; #define MAXSIZE 100 #define MAXROW 100 #define OK 1
#define ERROR -1 typedef struct int row; //行数 int col; //列数 int v; //非零元素值 triplenode; typedef struct triplenode data[MAXSIZE+1]; //非零元三元组 int rowtab[MAXROW+1];//各行第一个非零元的位置表 int mu,nu,tu; //矩阵的行数、列数和非零元个数 rtripletable;
void creat rtripletable A //创建稀疏矩阵 int k 1,sum 1,loop,p,t;
int num[MAXROW+1]; cout 请输入矩阵的行数和列数: endl; cout 行数:;cin A.mu; cout 列数:;cin A.nu; cout 非零元素个数:;cin A.tu; cout 请输入该矩阵的非零元:格式行+列+值. ps:以输入全零为结束标记!) endl; for loop 1;loop A.tu;loop++ //输入三元组的行数,列数和非零元素值 cin A.data[loop].row; cin A.data[loop].col; cin A.data[loop].v;
for p 1;p A.mu;p++ num[p] 0;//A三元组每一列的非零元素个数
for t 1;t A.tu;t++ ++num[A.data[t].row];//求A中每一列含非零元个数 A.rowtab[1] 1;//求第p列中第一个非零元在A.data中的序号 for t 2;t A.mu;t++ A.rowtab[t] A.rowtab[t-1]+num[t-1]; return;
void print rtripletable A //输出稀疏矩阵
int result[MAXROW+1][MAXROW+1];//定义一个二维数组 int i,j;
for i 1;i A.mu;i++ for j 1;j A.nu;j++ result[i][j] 0; //初始化为0 for i 1;i A.tu;i++ result[A.data[i].row][A.data[i].col] A.data[i].v; for i 1;i A.mu;i++ //输出所做运算的结果 for j 1;j A.nu;j++ cout result[i][j] \t; cout endl;
int addsmatrix rtripletable M, rtripletable N //矩阵相加 if M.mu! N.mu //行数相等才能相加 cout ERROR;
rtripletable Q;Q.mu M.mu;Q.nu N.nu; int p,q,k; p 1;q 1;k 1;
while p M.tuq N.tu //两个稀疏矩阵存在 if M.data[p].row N.data[q].row //两个稀疏矩阵的行数相等 if M.data[p].col N.data[q].col //两个稀疏矩阵的列数相等 if M.data[p].v+N.data[q].v! 0 //两个稀疏矩阵相加的结果不为0 Q.data[k].row M.data[p].row; Q.data[k].col M.data[p].col; Q.data[k].v M.data[p].v+N.data[q].v;++k; ++q;++p; e
文档评论(0)