用稀疏矩阵的三元组进行加法

算法思想:在进行三元组的加法时
前提条件:用while循环,它的出口条件为 i,j 都小于他们分别所对应的三元组中元素的个数。
满足前提条件的情况下,分 3种情况:
1. 行列数相等;(1)相加等于零,则直接跳过,i++;j++;。(2)相加不为零,把相加后的数写下来,i++;j++;
2. A的行大于B的行;(1)写下行数小的一个,也就是B。然后进行B的j++;
3. A的行小于B的行;(1)写下行数小的一个,也就是A。然后进行A的i++;
 当 i,j 其中一个或者两个不满足前提条件时,退出循环。此时又分两种情况:
1. i>A的三元组中元素的个数并且 j<=B的三元组中的元素的个数,此时写B。写B时注意用while循环把B剩下的元素全都写下来。
2. j>B的三元组中元素的个数并且 i<=A的三元组中的元素的个数,此时写A。写A时注意用while循环把A剩下的元素全都写下来。

所以,代码如下:

#include 

typedef struct{
    int data[50][50];
    int r,c;
}matrix;

void creat(matrix *A)
{
    int m,n;
    printf("Please input the matric's row and col \n");
    scanf("%d",&A->r);
    scanf("%d",&A->c);
    printf("Please input the matric's array \n");
    for(m=0;mr;m++)
        for(n=0;nc;n++)
           scanf("%d",&A->data[m][n]);
}

void input(matrix A)
{
    int m,n;
    for(m=1;m<=A.r;m++)
        for(n=1;n<=A.c;n++)
          {
              printf("%5d",A.data[m-1][n-1]);
              if(n%A.c==0)
                 printf("\n");
          }
}

// 三元组表示
void Three(matrix B,int A[100][3])
{
    int m,n;
    int k=1;
    for(m=0;mB[j][1])
            {
                C[m][0]=B[j][0];
                C[m][1]=B[j][1];
                C[m][2]=B[j][2];
                m++;
                j++;
            }
            else
                if(A[i][0]>B[j][0])
            {
                C[m][0]=B[j][0];
                C[m][1]=B[j][1];
                C[m][2]=B[j][2];
                m++;
                j++;
            }
            else
                if(A[i][0]A[0][2])
     {
         while(j<=B[0][2])
         {
             C[m][0]=B[j][0];
             C[m][1]=B[j][1];
             C[m][2]=B[j][2];
             m++;
             j++;
         }

     }
     else
        if(j>B[0][2])
     {
         while(i<=A[0][2])
         {
             C[m][0]=A[i][0];
             C[m][1]=A[i][1];
             C[m][2]=A[i][2];
             m++;
             i++;
         }

     }
         C[0][0]=A[0][0];
         C[0][1]=A[0][1];
         C[0][2]=m-1;

}
int main()
{
    int A[100][3];
    int B[100][3];
    int C[100][3];
    matrix i,j; //  创建了一个矩阵B;
    creat(&i);
    input(i);
    Three(i,A);
    printf("Display the Three \n");
    display(A);
    printf("----------------------------------\n");
    creat(&j);
    input(j);
    Three(j,B);
    printf("Display the Three \n");
    display(B);
    add(A,B,C);
    printf("----------------------------------\n");
    printf("After add display the Three \n");
    display(C);
    return 0;
}

你可能感兴趣的:(用稀疏矩阵的三元组进行加法)