资源描述:
《三元组实现稀疏矩阵加减乘.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#defineMAXSIZE12500//三元组结构typedefstruct{inti,j;//矩阵行下标和列下标inte;//值}Triple;//矩阵结构typedefstruct{Tripledata[MAXSIZE+1];intrpos[MAXSIZE+1];//这是存放各行第一非零元在矩阵中的位置intmu,nu,tu;//矩阵的行数、列数、非零元个数}Matrix;voidInit(Matrix*M);voidAdd(Matrix*M,Mat
2、rix*T,Matrix*G);voidJian(Matrix*M,Matrix*T,Matrix*G);voidCheng(Matrix*M,Matrix*T,Matrix*G);voidCheng(Matrix*M,Matrix*T,Matrix*G);voidPrintMatrix(Matrix*M);//2、初始化矩阵voidInit(Matrix*M){inti;if(M->mu<1
3、
4、M->nu<1
5、
6、M->tu>M->mu*M->nu){printf("出错!");//如果矩阵的行数、列数不符合要求,打印出
7、错}for(i=1;i<=M->tu;i++)//data[0]不用{printf("第%d个非零元的行号:",i);//以下为数据初始化scanf("%d",&M->data[i].i);printf("第%d个非零元的列号:",i);scanf("%d",&M->data[i].j);printf("第%d个非零元的元素值:",i);scanf("%d",&M->data[i].e);}printf("");printf("您创建的矩阵如下:");PrintMatrix(M);}//3、矩阵相加voidAdd(M
8、atrix*M,Matrix*T,Matrix*G){G->mu=M->mu;//因为加减运算必须维数相等,所以M、T行、列数相等,初始化第三方矩阵的行、列数。G->nu=M->nu;G->tu=0;intg,m,t;//g、m、t分别记录三个矩阵的元素的存储位置g=m=t=1;//从data[1]开始intk;intsum;//和if(M->mu!=T->mu
9、
10、M->nu!=T->nu){printf("维数不等!");}for(k=1;k<=M->mu;k++){//行下标和下标相等的对应元素相加/********
11、**************开始**************************/if(M->data[m].i==k&&T->data[t].i==k)//行下标相等时{if(M->data[m].j==T->data[t].j)//列下标相等时{sum=M->data[m].e+T->data[t].e;//矩阵向加if(sum!=0)//相加不为零时{G->data[g].i=k;G->data[g].j=M->data[m].j;G->data[g].e=sum;G->tu++;g++;m++;t++;}else
12、//矩阵相加为零时,不做存储操作{m++;t++;}}}/**********************结束**************************///行下标和下标不等的元素直接插入到G的相应位置/**********************开始**************************/while(M->data[m].i==k)//插入M剩余的元素{G->data[g].i=k;G->data[g].j=M->data[m].j;G->data[g].e=M->data[m].e;G->tu++;m
13、++;g++;}while(T->data[t].i==k)//插入T剩余的元素{G->data[g].i=k;G->data[g].j=T->data[t].j;G->data[g].e=T->data[t].e;G->tu++;t++;g++;}//G->tu=g;//记录运算完成后,第三方矩阵非零元的个数/***********************结束*************************/}printf("");printf("相加后的矩阵如下:");PrintMatrix(G);}//4、矩
14、阵相减voidJian(Matrix*M,Matrix*T,Matrix*G){G->mu=M->mu;G->nu=M->nu;G->tu=0;intsum,k;intm,t,g;m=t=g=1;if(M->mu!=T->mu
15、
16、M->nu!=T->nu){printf("维数不等!"