#include <stdio.h> #define MAX_SIZE 100

typedef struct { int row; int col; int val; } Triple;

typedef struct { Triple data[MAX_SIZE + 1]; int rows, cols, nums; } TSMatrix;

// 矩阵相加 int Add(TSMatrix A, TSMatrix B, TSMatrix *C) { if (A.rows != B.rows || A.cols != B.cols) { return 0; } C->rows = A.rows; C->cols = A.cols; int pa = 1, pb = 1, pc = 1; while (pa <= A.nums && pb <= B.nums) { if (A.data[pa].row < B.data[pb].row || (A.data[pa].row == B.data[pb].row && A.data[pa].col < B.data[pb].col)) { C->data[pc++] = A.data[pa++]; } else if (A.data[pa].row > B.data[pb].row || (A.data[pa].row == B.data[pb].row && A.data[pa].col > B.data[pb].col)) { C->data[pc++] = B.data[pb++]; } else { if (A.data[pa].val + B.data[pb].val != 0) { C->data[pc].row = A.data[pa].row; C->data[pc].col = A.data[pa].col; C->data[pc].val = A.data[pa].val + B.data[pb].val; pc++; } pa++; pb++; } } while (pa <= A.nums) { C->data[pc++] = A.data[pa++]; } while (pb <= B.nums) { C->data[pc++] = B.data[pb++]; } C->nums = pc - 1; return 1; }

int main() { TSMatrix A = { { {1, 1, 2}, {1, 3, 1}, {2, 2, 3}, {3, 1, 4}, {3, 4, 5}, }, 3, 4, 5 }; TSMatrix B = { { {1, 1, 3}, {1, 2, 2}, {2, 2, -1}, {3, 1, -4}, {3, 4, -5}, }, 3, 4, 5 }; TSMatrix C; if (Add(A, B, &C)) { for (int i = 1; i <= C.nums; i++) { printf("(%d, %d, %d) ", C.data[i].row, C.data[i].col, C.data[i].val); } printf("\n"); } else { printf("矩阵不同阶,无法相加。\n"); } return 0; }

C语言实现稀疏矩阵相加算法:三元组顺序表存储结构

原文地址: https://www.cveoy.top/t/topic/nILN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录