资源描述:
《三元组实现稀疏矩阵加减乘资料》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
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,Matrix*T,Matrix*G);voidJian
2、(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("出错!");//如果矩阵的行数、列数不符合要求,打印出错}for(i=1;i<=M->tu;i++)//data[0]不用{printf("第%d个非
7、零元的行号:",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(Matrix*M,Matrix*T,Matrix*G){G->mu=M->mu;//因为加减运算必须维数相等,所以M、T行、列数相等,初始化第三方
8、矩阵的行、列数。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++){//行下标和下标相等的对应元素相加/**********************开始**************************/if(M->data[m].i==k&&T->data[t].i==k)//行下标相等时{if(M->da
11、ta[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//矩阵相加为零时,不做存储操作{m++;t++;}}}/**********************结束**************************///行下标和下标不等的元素直接插入到G的相应位置/***************
12、*******开始**************************/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++;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;//记录运算完成后
13、,第三方矩阵非零元的个数/***********************结束*************************/}printf("");printf("相加后的矩阵如下:");PrintMatrix(G);}//4、矩阵相减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
14、
15、M->nu!=T->nu){printf("维数不等!"