稀疏矩阵运算器_第1页
稀疏矩阵运算器_第2页
稀疏矩阵运算器_第3页
稀疏矩阵运算器_第4页
稀疏矩阵运算器_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计稀疏矩阵运算器目录1 .课程设计的目的32 .需求分析33 .概要设计44 .详细设计55 .调试分析126 .用户手册127 .测试结果138 .程序清单139 .小结2010 .参考文献201. 课程设计的目的( 1) 、加强对三元组的了解和掌握,学会使用三元组的相关算法;( 2) 、掌握稀疏矩阵的压缩存储算法( 3) 、掌握矩阵的转置以及矩阵的加法、乘法等算法( 4) 、对数据结构基本理论和存储结构及算法设计有更加深入的理解;( 5) 、提高综合运用所学的理论知识和方法独立分析和解决问题的能力2、需求分析 1) 1) 、以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实

2、现矩阵转置,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。 2) 、 typedef struct / 定义三元组的结构 int i,j;int v;triple;class tripletable /定义描述稀疏矩阵及其操作的类public:triple datamaxsize;int rposmaxsize;void convert() ;void add( );void multi ( );private:int m ;int n ;int t ;int a ;;(3)、voidtripletable二convert() 矩

3、阵的转置voidtripletable:add()矩阵的加法void tripletable:multi()矩阵的乘法voidmain()/实现菜单选择功能3、概要设计4、详细设计(1)结构设计typedef struct /定义三元组的结构int i,j;int v;triple;class tripletable定义描述稀疏矩阵及其操作的类public:triple datamaxsize;int rposmaxsize;void convert。;void add();void multi ();private:int m ;int n ;int t ;int a ;(2)、函数设计 v

4、oid tripletable:convert() 矩阵的转置int k;tripletable a,b;couta.ma.na.t;for(k=1;ka.datak.ia.datak.ja.datak.v;b.m=a.m;b.n=a.n;b.t=a.t;if(b.t)int q=1,col;for(col=1;col=a.n;+col)for(int p=1;p=a.t;+p) if(a.datap.j=col) (b.dataq.i=a.datap.j;b.dataq.j=a.datap.i;b.dataq.v=a.datap.v;+q; int shuru100100=0;for(k=1

5、;k=b.t;k+)shurub.datak.jb.datak.i=b.datak.v; cout输入为:endl;for(k=1;k=b.m;k+)for(int l=1;l=b.n;l+) coutshurukl ; coutendl;int result100100=0;for(k=1;k=b.t;k+)resultb.datak.ib.datak.j=b.datak.v; cout结果为:endl;for(k=1;k=b.n;k+)for(int l=1;l=b.m;l+) coutresultkl ;coutendl; void tripletable:add()矩阵的加法int k

6、;tripletable a,b;couta.ma.na.t;for(k=1;ka.datak.ia.datak.ja.datak.v;)coutb.mb.nb.t;for(k=1;kb.datak.ib.datak.jb.datak.v;)if(a.m!=b.m|a.n!=b.n)cout输入错误:a与b的行数或列数不相同,请重新输入endl;return;)int a100100=0;for(k=1;k=a.t;k+)aa.datak.ia.datak.j=a.datak.v;couta 输入为:endl;for(k=1;k=a.m;k+)for(int l=1;l=a.n;l+) cou

7、takl;coutendl;int b100100=0;for(k=1;k=b.t;k+)bb.datak.ib.datak.j=b.datak.v;coutb 输入为:endl;for(k=1;k=b.m;k+)for(int l=1;l=b.n;l+) coutbkl;coutendl;int c100100=0;for(k=1;k=a.m;k+)for(int l=1;l=a.n;l+)ckl=akl+bkl; ) )cout加法结果 c 为:endl;for(k=1;k=a.m;k+)(for(int l=1;l=a.n;l+) coutckl;coutendl;) void trip

8、letable:multi()矩阵的乘法( int k; tripletable a,b,c;couta.ma.na.t;for(k=1;ka.datak.ia.datak.ja.datak.v;)int row=1;for(k=1;k=a.t;k+)(while(row=a.datak.i)( a.rposrow+=k;)while(row=a.m)a.rposrow+=a.t+1;coutb.mb.nb.t;for(k=1;kb.datak.ib.datak.jb.datak.v;)row=1;for(k=1;k=b.t;k+)(while(row=b.datak.i)b.rposrow+

9、=k;while(row=b.m)b.rposrow+=b.t+1;if(a.n!=b.m)cout 输入错误: a 的列数不等于b 的行数,请重新输入 endl;return;c.m=a.m;c.n=b.n;c.t=0;int arow,p,q,ccol,t,tp;if(a.t*b.t!=0)for(arow=1;arow=a.m;+arow)int ctempmaxsize=0;c.rposarow=c.t+1;if(arowa.m)tp=a.rposarow+1;elsetp=a.t+1;for(p=a.rposarow;ptp;+p)int brow=a.datap.j;if(brow

10、b.m)t=b.rposbrow+1;elset=b.t+1;for(q=b.rposbrow;qt;+q)ccol=b.dataq.j;ctempccol+=a.datap.v*b.dataq.v;for(ccol=1;ccolmaxsize)return;c.datac.t.i=arow;c.datac.t.j=ccol;c.datac.t.v=ctempccol;)int a100100=0;for(k=1 ;k=a.t;k+)(aa.datak.ia.datak.j=a.datak.v;)couta 输入为: coutendl;for(k=1 ;k=a.m;k+)(for(int 1=

11、1 ;l=a.n;l+) coutaklcoutendl;)int b100100=0;for(k=1 ;k=b.t;k+) (bb.datak.ib.datak.j=b.datak.v;)coutb 输入为:endl;for(k=1 ;k=b.m;k+)(for(int 1=1 ;l=b.n;l+) coutbkl coutendl;)int c100100=0;for(k=1 ;k=c.t;k+)(cc.datak.ic.datak.j=c.datak.v;)cout乘法结果 c 为:endl;for(k=1 ;k=c.m;k+)(for(int 1=1 ;l=c.n;l+) coutck

12、l coutendl;)void main()tripletable a,b;int m;printf(稀疏矩阵计算器n);printf(.1、稀疏矩阵转置 n);printf(.2、稀疏矩阵加法n);printf(.3、稀疏矩阵乘法n);printf(4 、退出程序 n);do cout 请选择菜单(输入数字1 4)m;switch(m)case 1: a.convert( );break;case 2: a.add( ) ;break;case 3: a.multi();break;case 4: return;default: break;while(m);5、调试分析( 1)矩阵转置4

13、请选择菜单输入数字1 一 q c:usersadm i ni5tratordes hop源程浩.十、口 e bu 炉味就矩阵,exe12 4 3 140 1 0 0 2 -普法法歹歹歹iqxkn疏疏疏出h零 u ipob-n-d-口 里数数数数鬟mi 二二二一二二二一二二tttttt1 2 3 4 5 6 egrglnffrjm 入人入入人入a3a;4 1*(2)矩阵加法航矩4、请选择菜单(输入数字1 4)、稀疏矩阵暴f、逋出程序01b输入以 a 0 20口法最果露.2gm30a 4(3)矩阵乘法人人人人人6、用户手册1=1 回本程序在vc6.0上编译,界面如下所示,按提示操作即可| 1011

14、15已悟也1中第51同4口”11:叩!涯程奏计口曰609鱼芫毛阵乂巳营法法一. 寻广-l-m tj jj -mgji4ulpj 口王 fr%.为 wt- usati5 ddb#s稀、:* 1 2 3 4请选择菜单输入数字1 一 g7、测试结果如分析调试的运行结果截图所示。8、程序清单#include#include#include#include#define maxsize 100 typedef struct / 定义三元组的结构 int i,j;int v;triple;class tripletable/ 定义描述稀疏矩阵及其操作的类public:triple datamaxsize;

15、int rposmaxsize;void convert() ;void add( );void multi ( );private:int m ;int n ;int t ;int a ;/*/void tripletable:convert( )/矩阵的转置int k;tripletable a,b;couta.ma.na.t;for(k=1;ka.datak.ia.datak.ja.datak.v;b.m=a.m;b.n=a.n;b.t=a.t;if(b.t)(int q=1,col;for(col=1;col=a.n;+col)for(int p=1;p=a.t;+p)if(a.dat

16、ap.j=col)(b.dataq.i=a.datap.j;b.dataq.j=a.datap.i;b.dataq.v=a.datap.v;+q;int shuru100100=0;for(k=1;k=b.t;k+)shurub.datak.jb.datak.i=b.datak.v;cout输入为:endl;for(k=1;k=b.m;k+)for(int l=1;l=b.n;l+)coutshurukl ;coutendl;int result100100=0;for(k=1;k=b.t;k+)resultb.datak.ib.datak.j=b.datak.v;cout结果为:endl;f

17、or(k=1;k=b.n;k+)for(int l=1;l=b.m;l+)coutresultkl ;coutendl;/*/ void tripletable:add() 矩阵的加法(int k;tripletable a,b;couta.ma.na.t;for(k=1;ka.datak.ia.datak.ja.datak.v;)coutb.mb.nb.t;for(k=1;kb.datak.ib.datak.jb.datak.v;)if(a.m!=b.m|a.n!=b.n)(endl;cout输入错误:a与b的行数或列数不相同,请重新输入return;)int a100100=0;for(k

18、=1;k=a.t;k+)aa.datak.ia.datak.j=a.datak.v;couta 输入为:endl;for(k=1;k=a.m;k+)for(int l=1;l=a.n;l+) coutakl;coutendl;int b100100=0; for(k=1;k=b.t;k+) bb.datak.ib.datak.j=b.datak.v;)coutb 输入为:endl;for(k=1;k=b.m;k+)(for(int l=1;l=b.n;l+) coutbkl;coutendl;)int c100100=0;for(k=1;k=a.m;k+)for(int l=1;l=a.n;l

19、+)ckl=akl+bkl;cout加法结果 c 为:endl;for(k=1;k=a.m;k+)for(int l=1;l=a.n;l+) coutckl;coutendl;/*/void tripletable:multi()矩阵的乘法int k;tripletable a,b,c;couta.ma.na.t;for(k=1;ka.datak.ia.datak.ja.datak.v;int row=1;for(k=1;k=a.t;k+)while(row=a.datak.i)a.rposrow+=k;) ) while(row=a.m)a.rposrow+=a.t+1;coutb.mb.n

20、b.t;for(k=1;kb.datak.ib.datak.jb.datak.v;)row=1;for(k=1;k=b.t;k+)while(row=b.datak.i)b.rposrow+=k;)while(row=b.m)b.rposrow+=b.t+1;if(a.n!=b.m)cout输入错误:a的列数不等于b的行数,请重新输入endl; return;)c.m=a.m;c.n=b.n;c.t=0;int arow,p,q,ccol,t,tp;if(a.t*b.t!=0)for(arow=1;arow=a.m;+arow)int ctempmaxsize=0;c.rposarow=c.t

21、+1;if(arowa.m)tp=a.rposarow+1;elsetp=a.t+1;for(p=a.rposarow;ptp;+p) int brow=a.datap.j;if(browb.m)t=b.rposbrow+1;elset=b.t+1;for(q=b.rposbrow;qt;+q) ccol=b.dataq.j; ctempccol+=a.datap.v*b.dataq.v;)for(ccol=1;ccolmaxsize)return;c.datac.t.i=arow;c.datac.t.j=ccol;c.datac.t.v=ctempccol;)int a100100=0;for(k=1;k=a.t;k+)aa.datak.ia.datak.j=a.datak.v;couta 输入为:;coutendl;for(k=1;k=a.m;k+)for(int l=1;l=a.n;l+) coutakl;coutendl;int b100100=0;for(k=1;k=b.t;k+)bb.datak.ib.datak.j=b.datak.v;coutb 输入为:endl;for(k=1;k=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论