目的:以三元組表形式表示稀疏矩陣,實現(xiàn)兩個矩陣的加法、減法。
實驗步驟
1. 定義三元組存儲結(jié)構(gòu)
2. 輸入稀疏矩陣:首先應(yīng)輸入矩陣的行數(shù)、列數(shù)和非零項的數(shù)目,并判別給出的兩個矩陣的行、列數(shù)對于所要求進(jìn)行的運算是否匹配??稍O(shè)矩陣的行數(shù)和列數(shù)均不超過20。接下來逐個輸入表示非零元的三元組(i, j, aij),程序可以對三元組的輸入順序加以限制,如按行優(yōu)先。
3. 進(jìn)行相關(guān)的運算,如加法或減法。
4. 輸出結(jié)果矩陣(以陣列的形式輸出運算結(jié)果)。
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
//用來存放三元組中每一個非零元素的信息
typedef struct {
int r, c; //行號 列號
int d;//表示非零元的值
} TupNode;
//用來存放三元組矩陣的信息
typedef struct {
int rows, cols, nums; //行數(shù) 列數(shù) 非零元素個數(shù)
TupNode data[MAXSIZE];
} TSMatrix;
//將三元元組表轉(zhuǎn)換成二維數(shù)組
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個元組的信息(依次輸入行數(shù),列數(shù),非零元個數(shù)):\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個非零元素行標(biāo),列標(biāo),數(shù)值", 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,該矩陣不能進(jìn)行加減運算,程序退出\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]; //存儲相減后結(jié)果
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);
}
文章來源:http://www.zghlxwxcb.cn/news/detail-531810.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-531810.html
到了這里,關(guān)于【C 數(shù)據(jù)結(jié)構(gòu)】以三元組表形式表示稀疏矩陣,實現(xiàn)兩個矩陣的加法、減法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!