矩阵的加法C语言实现(可运行)
温馨提示:
本文最后更新于 2022年04月17日,已超过 979 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
天下文章一大抄,看了好多博客,内容都是一模一样的,很少有自己写的,代码也没有注释,难受想哭!!!
这里呢,我就自己记录一下供大家参考学习
#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);
}
简单的把算法实现出来了 也没有考虑健壮性等等,如发现问题,欢迎大家指正。
正文到此结束
- 本文标签: 数据结构 算法
- 本文链接: https://www.it1997.com/article/56
- 版权声明: 本文由小陈没烦恼原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权