三元组表稀疏矩阵其求和

  • 格式:doc
  • 大小:38.50 KB
  • 文档页数:6

#include "stdio.h"

#define MAXSIZE 100

struct node

{

int i,j;

int v;

};

struct sparmatrix

{

int rows,cols;

int terms;

struct node data[MAXSIZE];

};

void sum(struct sparmatrix a,struct sparmatrix b);

main()

{

int m[MAXSIZE][MAXSIZE],n[MAXSIZE][MAXSIZE];

int i,j,mrow,mcol,nrow,ncol,ano=0,bno=0,counter=0,t=0;

struct sparmatrix a,b;

printf("Please input row and col of matrix m(for example: row,col):");

scanf("%d,%d",&mrow,&mcol);

printf("\n");

printf("Please input row and col of matrix n(for example: row,col):");

scanf("%d,%d",&nrow,&ncol);

if ((mrow!=nrow)||(mcol!=ncol))

{

printf("ERROR: dimensions of m,n are different!");

getch();

return; /*comapre dimension between matrix m and n*/

}

for (i=0;i

for (j=0;j

{ printf("input value of data element m[%d][%d] ",i,j);

scanf("%d",&m[i][j]);

} /*input value of matrix m*/

for (i=0;i

for (j=0;j

{ printf("input value of data element n[%d][%d] ",i,j);

scanf("%d",&n[i][j]); } /*input value of matrix n*/

printf("matrix m you input as follows:\n");

for (i=0;i

for (j=0;j

{

if (t==mcol)

{

printf("\n");

t=0;

}

printf(" %d",m[i][j]);

t++;

} /*output matrix m*/

printf("\n");

printf("\n");

printf("matrix n you input as follows:\n");

t=0;

for (i=0;i

for (j=0;j

{

if (t==ncol)

{

printf("\n");

t=0;

}

printf(" %d",n[i][j]);

t++;

} /*output matrix n*/

printf("\n");

printf("\n");

for (i=0;i

for (j=0;j

if (m[i][j]!=0)

{ counter++;

a.data[ano].i=i;

a.data[ano].j=j;

a.data[ano].v=m[i][j];

ano++;

} a.rows=mrow;a.cols=mcol;a.terms=counter;

printf("tripule node of m: i j v \n");

for(i=0;i

printf(" %5d %5d %5d\n",a.data[i].i,a.data[i].j,a.data[i].v);

counter=0;

for (i=0;i

for (j=0;j

if (n[i][j]!=0)

{ counter++;

b.data[bno].i=i;

b.data[bno].j=j;

b.data[bno].v=n[i][j];

bno++;

}

b.rows=nrow;b.cols=ncol;b.terms=counter;

printf("tripule node of n: i j v\n");

for(i=0;i

printf(" %5d %5d %5d\n",b.data[i].i,b.data[i].j,b.data[i].v);

sum(a,b);

getch();

}

void sum(struct sparmatrix a,struct sparmatrix b)

{

struct sparmatrix c; /*c为a+b的转置*/

int i,j,x,k=0,p=0,cno=0,counter=0,flag=0;

int mn[MAXSIZE][MAXSIZE]; /*define variables*/

c.cols=a.cols;

c.rows=a.rows;

if (a.terms==0&&b.terms==0)

{

return ; /*check the numbers of data element that isn't zero*/

}

for(i=1;i<=c.rows;i++) {for(j=1;j<=c.cols;j++)

{

if(a.data[k].i==b.data[p].i)

if(a.data[k].j==b.data[p].j)

{c.data[cno].v=a.data[k].v+b.data[p].v;

c.data[cno].i=a.data[k].i;

c.data[cno].j=a.data[k].j;

cno++;

k++;

p++;

}

else

if(a.data[k].j>b.data[p].j)

{c.data[cno].v=b.data[p].v;

c.data[cno].i=b.data[p].i;

c.data[cno].j=b.data[p].j;

cno++;

p++;

}

else

{c.data[cno].v=a.data[k].v;

c.data[cno].i=a.data[k].i;

c.data[cno].j=a.data[k].j;

cno++;

k++;

}

else

if(a.data[k].i>b.data[p].i)

{c.data[cno].v=b.data[p].v;

c.data[cno].i=b.data[p].i;

c.data[cno].j=b.data[p].j;

cno++;

p++;

}

else

{c.data[cno].v=a.data[k].v;

c.data[cno].i=a.data[k].i;

c.data[cno].j=a.data[k].j;

cno++;

k++;

};

if (k==a.terms||p==b.terms)

{flag=1;break;}

}

if (flag==1)

break;

}

if(k==a.terms&&p

while(p

{c.data[cno].v=b.data[p].v;

c.data[cno].i=b.data[p].i;

c.data[cno].j=b.data[p].j;

cno++;

p++;

}

if(p==b.terms&&k

while(k

{c.data[cno].v=a.data[k].v;

c.data[cno].i=a.data[k].i;

c.data[cno].j=a.data[k].j;

cno++;

k++;

}

if(k==a.terms&&p==b.terms)

c.terms=cno;

printf("the tripule of m+n is: i j v \n");

for(i=0;i

printf(" %5d %5d %5d\n",c.data[i].i,c.data[i].j,c.data[i].v);