//自己写的,亲测有效
#include<stdio.h>
#include<stdlib.h>
typedef struct term {
int row; int col;int value;
}Term;
//一定要保证两个三元组表所代表的矩阵的行数和列数相等,即形状是一样的。
Term* Add2Triples(Term* elem1, int len1, Term* elem2, int len2){
int lenTerm1=len1;
int lenTerm2=len2;
int* z = (int*)malloc((sizeof(int))*(lenTerm1+lenTerm1));
Term* elemResult=(Term*)malloc((sizeof(Term))*(lenTerm1+lenTerm1));
int i,j;
for(i=0;i<lenTerm1;i++){
for(j = 0; j < lenTerm2;j++){
if((elem2[j].col==elem1[i].col)&&(elem2[j].row==elem1[i].row)){
z[j]=j;
elem1[i].value=elem1[i].value+elem2[j].value;
}
}
}
for(i=0;i<lenTerm1;i++){
elemResult[i].col=elem1[i].col;
elemResult[i].row=elem1[i].row;
elemResult[i].value=elem1[i].value;
}
for(i=0;i<lenTerm2;i++){
if(z[i]!=i){
elemResult[lenTerm1].col=elem2[i].col;
elemResult[lenTerm1].row=elem2[i].row;
elemResult[lenTerm1].value=elem2[i].value;
lenTerm1++;
}
}
return elemResult;
}
void main() {
int a[5][6]={
0} ;
int b[5][6]={
0} ;
int c[5][6]={
0} ;
Term* elemResult;
int i,j ;
Term elem1[7] = {
{
0,0,15},
{
0,2,22 },
{
0,5,-15 },
{
1,1,11 },
{
2,2,3 },
{
3,3,-6 },
{
4,0,91 }};
Term elem2[8] = {
{
0,0,45},
{
0,3,4 },
{
0,4,1 },
{
1,1,19 },
{
1,3,2 },
{
2,2,22 },
{
3,0,4 },
{
4,5,1 }};
int lenTerm1=sizeof(elem1)/sizeof(Term);
int lenTerm2=sizeof(elem2)/sizeof(Term);
for (i = 0; i < lenTerm1;i++) {
a[elem1[i].row][elem1[i].col] = elem1[i].value;
}
for (i = 0; i < lenTerm2;i++) {
b[elem2[i].row][elem2[i].col] = elem2[i].value;
}
for (i = 0; i < 5;i++) {
for (j = 0; j < 6;j++) {
printf("%5d ",a[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < 5;i++) {
for (j = 0; j < 6;j++) {
printf("%5d ",b[i][j]);
}
printf("\n");
}
elemResult= Add2Triples(elem1,lenTerm1,elem2,lenTerm2);
printf("\n");
printf("\n");
for(i = 0; i <lenTerm1+lenTerm2;i++){
if(elemResult[i].row >-1){
printf("%5d %5d %5d \n",elemResult[i].row,elemResult[i].col,elemResult[i].value);
c[elemResult[i].row][elemResult[i].col] = elemResult[i].value;
}
}
printf("\n");
printf("\n");
for (i = 0; i < 5;i++) {
for (j = 0; j < 6;j++) {
printf("%5d ",c[i][j]);
}
printf("\n");
}
system("pause");
}
稀疏矩阵-加法运算-三元组表表示
猜你喜欢
转载自blog.csdn.net/m0_47472749/article/details/121494900
今日推荐
周排行