【C 数据结构】以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法

您所在的位置:网站首页 三元组存储稀疏矩阵进行转置 【C 数据结构】以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法

【C 数据结构】以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法

2024-03-15 10:48| 来源: 网络整理| 查看: 265

目的:以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法。

实验步骤

1. 定义三元组存储结构

2. 输入稀疏矩阵:首先应输入矩阵的行数、列数和非零项的数目,并判别给出的两个矩阵的行、列数对于所要求进行的运算是否匹配。可设矩阵的行数和列数均不超过20。接下来逐个输入表示非零元的三元组(i, j, aij),程序可以对三元组的输入顺序加以限制,如按行优先。

3. 进行相关的运算,如加法或减法。

4. 输出结果矩阵(以阵列的形式输出运算结果)。

#include #include #define MAXSIZE 20 #define OK 1 #define ERROR 0 //用来存放三元组中每一个非零元素的信息 typedef struct { int r, c; //行号 列号 int d;//表示非零元的值 } TupNode; //用来存放三元组矩阵的信息 typedef struct { int rows, cols, nums; //行数 列数 非零元素个数 TupNode data[MAXSIZE]; } TSMatrix; //将三元元组表转换成二维数组 void conversionMatrix(TSMatrix *t, int A[t->rows][t->cols]) { for (int i = 0; i < t->rows; i++) { for (int j = 0; j < t->cols; j++) { A[i][j] = 0; //全部元素赋值0 } } for (int i = 0; i < t->nums; i++) { A[t->data[i].r - 1][t->data[i].c - 1] = t->data[i].d; } } //打印矩阵 void printMatrix(TSMatrix *t) { int A[t->rows][t->cols]; conversionMatrix(t, A); for (int i = 0; i < t->rows; i++) { for (int j = 0; j < t->cols; j++) { printf("%2d ", A[i][j]);//以矩阵形式打印 } printf("\n"); } printf("\n"); } //输入三元组表 int inputMatrix(TSMatrix *t, int n) { printf("请输入第%d个元组的信息(依次输入行数,列数,非零元个数):\n", n); scanf("%d%d%d", &t->rows, &t->cols, &t->nums); //printf("t->rows=%d, t->cols=%d, t->nums=%d\n", t->rows, t->cols, t->nums); int i, j; printf("请输入每个三元组矩阵的非零元素的信息:\n"); for (i = 0, j = 0; i < t->nums; i++, j++) { printf("依次输入第%d个三元组第%d个非零元素行标,列标,数值", n, i + 1); scanf("%d%d%d", &t->data[i].r, &t->data[i].c, &t->data[i].d); // printf("t->data[%d].r=%d,t->data[%d].c=%d, t->data[%d]=%d\n", i,t->data[i].r, i,t->data[i].c, i,t->data[i].d); } printf("第%d个三元组表矩阵如下:\n", n); printMatrix(t); return OK; } //三元组表相加 void calculatingMatrix(TSMatrix *t1, TSMatrix *t2, TSMatrix *t) { if (t1->rows != t2->rows || t1->cols != t2->cols) { printf("error,该矩阵不能进行加减运算,程序退出\n"); exit(0); } int A[t1->rows][t1->cols]; int B[t2->rows][t2->cols]; int C[t1->rows][t1->cols]; int C1[t1->rows][t1->cols]; //存储相减后结果 conversionMatrix(t1, A); conversionMatrix(t2, B); printf("相减后三元组表矩阵如下:\n"); for (int i = 0; i < t1->rows; i++) { for (int j = 0; j < t1->cols; j++) { C1[i][j] = A[i][j] - B[i][j]; printf("%2d ", C1[i][j]);//以矩阵形式打印 } printf("\n"); } printf("相加后三元组表矩阵如下:\n"); for (int i = 0; i < t1->rows; i++) { for (int j = 0; j < t1->cols; j++) { C[i][j] = A[i][j] + B[i][j]; printf("%2d ", C[i][j]);//以矩阵形式打印 } printf("\n"); } } int main() { TSMatrix t1; TSMatrix t2; TSMatrix t; inputMatrix(&t1, 1); inputMatrix(&t2, 2); calculatingMatrix(&t1, &t2, &t); }

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3