为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

稀疏矩阵的相加

2017-09-20 16页 doc 106KB 67阅读

用户头像

is_620441

暂无简介

举报
稀疏矩阵的相加稀疏矩阵的相加 题 目: 稀疏矩阵的相加 1、 问题描述 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。 以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。 2、 设计 2.1.存储结构设计 稀疏矩阵的行逻辑连接的顺序表存储结构表示如下: #define MAXSIZE 20 /*非零元个数最大值*/ 最大值*/#defin...
稀疏矩阵的相加
稀疏矩阵的相加 目: 稀疏矩阵的相加 1、 问题描述 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。 以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。 2、 2.1.存储结构设计 稀疏矩阵的行逻辑连接的顺序表存储结构表示如下: #define MAXSIZE 20 /*非零元个数最大值*/ 最大值*/#define MAXRC 10 /*各行第一个非零元总数 typedef struct{ ,列下标*/ int i,j; /*行下标 int e; /*非零元值*/ }Triple; typedef struct { /*行逻辑链接的顺序表*/ Triple data[MAXSIZE+1]; /*非零元三元组表,data[0]未用*/ int rpos[MAXRC+1]; /*各行第一个非零元的位置表*/ int mu,nu,tu; /*阵的行数、列数和非零元个数*/ }TSMatrix; 2.2.主要算法设计 对2个矩阵相加的算法如下: bool AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q) /*求稀疏矩阵的和Q=M+N*/ { int p=1,q=1,k=1; if(M.tu==0&&N.tu==0) /*为空矩阵的情况*/ { cout<<"该矩阵为空矩阵"<N.data[q].i) /*M的行值比N的大取N的值*/ { Q.data[k].i=N.data[q].i; Q.data[k].j=N.data[q].j; Q.data[k].e=N.data[q].e; k++; q++; } else /*M的行值和N一样大的情况*/ { if(M.data[p].jN.data[q].j)/*M的列值比M的大取N的值*/ { Q.data[k].i=N.data[q].i; Q.data[k].j=N.data[q].j; Q.data[k].e=N.data[q].e; k++; q++; } else /*M和N的列值相等*/ { if(M.data[p].e+N.data[q].e!=0)/*相加结果不为0才取M值*/ { Q.data[k].i=M.data[q].i; Q.data[k].j=M.data[q].j; Q.data[k].e=M.data[q].e+N.data[p].e; k++; } p++; q++; } } } while(q<=N.tu) /*再看N矩阵,直接取N值*/ { Q.data[k].i=N.data[q].i; Q.data[k].j=N.data[q].j; Q.data[k].e=N.data[q].e; k++; q++; } if(M.mu>N.mu) Q.mu=M.mu;/*Q的行和列的值取M,N的最大值*/ else Q.mu=N.mu; if(M.nu>N.nu) Q.nu=M.nu; else Q.nu=N.nu; Q.tu=k-1; cout<<"相加成功"< #include using namespace std; /*稀疏矩阵的三元组顺序表类型TSMatrix的定义*/ #define MAXSIZE 20 /*非零元个数最大值*/ #define MAXRC 10 typedef struct{ int i,j; /*行下标,列下标*/ int e; /*非零元值*/ }Triple; typedef struct { /*行逻辑链接的顺序表*/ Triple data[MAXSIZE+1]; /*非零元三元组表,data[0]未用*/ int rpos[MAXRC+1]; /*各行第一个非零元的位置表*/ int mu,nu,tu; /*阵的行数、列数和非零元个数*/ }TSMatrix; bool CreateSMatrix(TSMatrix &M) /*创建一个稀疏矩阵*/ {int p=1,a,b,c; cout<<"请输入矩阵的行列和非零元素个数"<>M.mu>>M.nu>>M.tu; if(M.tu>MAXSIZE||M.tu<=0||M.tu>M.mu*M.nu) { cout<<"输入错误"<>a>>b>>c; M.data[0].i=1; M.data[0].j=1; if(a<=M.mu&&b<=M.nu&&c!=0) { if(a>M.data[p-1].i||(a==M.data[p-1].i&&b>=M.data[p-1].j))/*行值比前一个大或行值等于前一个列值小于等于前一个元素*/ { M.data[p].i=a; M.data[p].j=b; M.data[p].e=c; p++; cout<<"输入成功"<N.data[q].i) { Q.data[k].i=N.data[q].i; Q.data[k].j=N.data[q].j; Q.data[k].e=N.data[q].e; k++; q++; } else { if(M.data[p].jN.data[q].j) { Q.data[k].i=N.data[q].i; Q.data[k].j=N.data[q].j; Q.data[k].e=N.data[q].e; k++; q++; } else { if(M.data[p].e+N.data[q].e!=0) { Q.data[k].i=M.data[q].i; Q.data[k].j=M.data[q].j; Q.data[k].e=M.data[q].e+N.data[p].e; k++; } p++; q++; } } } while(q<=N.tu) { Q.data[k].i=N.data[q].i; Q.data[k].j=N.data[q].j; Q.data[k].e=N.data[q].e; k++; q++; } if(M.mu>N.mu) Q.mu=M.mu; else Q.mu=N.mu; if(M.nu>N.nu) Q.nu=M.nu; else Q.nu=N.nu; Q.tu=k-1; cout<<"相加成功"<>select; if(select==0)break; switch(select) { case 1: CreateSMatrix(A); break; case 2: CreateSMatrix(B); break; case 3: PrintMatrix(A); break; case 4: PrintMatrix(B); break; case 5: AddSMatrix(A,B,C); break; case 6: PrintMatrix(C); break; default:cout<<"输入错误"<
/
本文档为【稀疏矩阵的相加】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索