矩阵的加法C语言实现(可运行)

天下文章一大抄,看了好多博客,内容都是一模一样的,很少有自己写的,代码也没有注释,难受想哭!!!
这里呢,我就自己记录一下供大家参考学习

#include <stdio.h> 
#define Maxsize 10 
//三元组结构体 
typedef struct {
    int e;  //元素的值 
    int i,j;  //非零元素的行 列 坐标 
}Triple; 
//三元组矩阵 
typedef struct {
    Triple data[Maxsize+1];  //三元组数组  用来存放非零元素 
    int m,n,t;  //矩阵的 行数 列数 非零元素个数 
}TMatrix;
/**
*初始化两个三元组矩阵 
*
*/
InitTMatrix(TMatrix &A,TMatrix &B){
    /**
    *A  0 2 0   B  1 0 0   C  1 2 0
    *   3 0 1      3 0 0      6 0 1
    */
    A.m = 2;A.n = 3;A.t = 3;
    A.data[1].e = 2;
    A.data[1].i = 0;
    A.data[1].j = 1;
    A.data[2].e = 3;
    A.data[2].i = 1;
    A.data[2].j = 0;
    A.data[3].e = 1;
    A.data[3].i = 1;
    A.data[3].j = 2;

    B.m = 2;B.n = 3;B.t = 2;
    B.data[1].e = 1;
    B.data[1].i = 0;
    B.data[1].j = 0;
    B.data[2].e = 3;
    B.data[2].i = 1;
    B.data[2].j = 0;
}
PrintTMatrix(char desc[],TMatrix M){
    puts(desc);
    for(int i = 1;i<=M.t;i++){
        printf("第 %d行第%d列元素是 %d \n",M.data[i].i,M.data[i].j,M.data[i].e);
    }

}
void MatrixAdd(TMatrix A,TMatrix B,TMatrix &C){

    int p = 1,q = 1 ,k = 1;  //循环遍历 i 用于循环 控制A 矩阵 p B ;q C; 
    int an = A.t,bn = B.t;//A B 两个三元组矩阵 的元素个数 
    while(p<=an&&q<=bn){  //直到 遍历完其中一个三元组 结束循环 
        if(A.data[p].i<B.data[q].i) {  //  A矩阵中 元素的 行标 小于 B元素的行标 
            //矩阵 A 和 B没有相同行 也就没有相同列 所以直接把A的复制给C 
            C.data[k].e = A.data[p].e;
            C.data[k].i = A.data[p].i;
            C.data[k].j = A.data[p].j;
            p++;k++;  //A 矩阵完成了一个元素的加操作 C矩阵也存入了一个元素 
        }else if(A.data[p].i==B.data[q].i){  //  A矩阵中 元素的 行标 等于 B元素的行标 
            //矩阵 A 和 B有相同行 接下来判断是否有相同列 
            if(A.data[p].j<B.data[q].j){
                //矩阵 A 和 B有相同行 没有相同列 
                C.data[k].e = A.data[p].e;
                C.data[k].i = A.data[p].i;
                C.data[k].j = A.data[p].j;
                p++;k++;  //A 矩阵完成了一个元素的加操作 C矩阵也存入了一个元素 
            }else if(A.data[p].j==B.data[q].j) {
                C.data[k].e = A.data[p].e + B.data[q].e;
                C.data[k].i = A.data[p].i;
                C.data[k].j = A.data[p].j;
                p++;q++;k++;
            }else{
                //矩阵 A 和 B有相同行 但没有相同列 所以直接把B的复制给C 
                C.data[k].e = B.data[q].e;
                C.data[k].i = B.data[q].i;
                C.data[k].j = B.data[q].j;
                q++;k++;  //B 矩阵完成了一个元素的加操作 C矩阵也存入了一个元素 
            }

        }else{  //  A矩阵中 元素的 行标 大于 B元素的行标 
            //矩阵 A 和 B没有相同行 也就没有相同列 所以直接把B的复制给C 
            C.data[k].e = B.data[q].e;
            C.data[k].i = B.data[q].i;
            C.data[k].j = B.data[q].j;
            q++;k++;  //B 矩阵完成了一个元素的加操作 C矩阵也存入了一个元素 
        }
    }
    while(p<=an) {
        C.data[k] = A.data[p];
        p++;k++;
    }
    while(q<=bn){
        C.data[k] = B.data[q];
        q++;k++;  
    }
    C.t = k-1;
    C.m = A.m;
    C.n = A.n;

}
main(){

    TMatrix A,B,C;
    InitTMatrix(A,B);
    PrintTMatrix("矩阵 A",A);
    PrintTMatrix("矩阵 B",B);
    MatrixAdd(A,B,C);
    PrintTMatrix("矩阵 C",C);


}

简单的把算法实现出来了 也没有考虑健壮性等等,如发现问题,欢迎大家指正。

file

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈没烦恼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值