C语言实现稀疏矩阵的完整攻略
1、什么是稀疏矩阵?
稀疏矩阵是矩阵中绝大部分元素为0的矩阵。相对于密集矩阵,稀疏矩阵可以用更少的存储空间来存储矩阵中的数据。
2、如何实现稀疏矩阵?
2.1 稀疏矩阵的三元组存储法
稀疏矩阵的三元组存储法是最常用的矩阵存储方法之一。其基本思路是:将矩阵中的非零元素及其对应的行列下标存储起来,对于未存储的元素,默认其值为0。具体方法是使用一个三元组数组来存储非零元素的行列下标和元素值。
typedef struct{
int row;
int col;
int value;
}Triple;
2.2 稀疏矩阵的压缩存储法
稀疏矩阵的压缩存储法是在三元组存储法的基础上进一步压缩存储。原理是将三元组中多余的行列下标去掉,只保留元素值及其对应的行列下标。这种存储方法可以大大缩小存储空间。
3、C语言实现稀疏矩阵
以三元组存储法为例,我们可以如下实现稀疏矩阵:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct{
int row;
int col;
int value;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int rows;
int cols;
int nums;
}TSMatrix;
int main(){
TSMatrix A, B;
//初始化矩阵A
A.rows = 3;
A.cols = 3;
A.nums = 3;
A.data[1].row = 1;
A.data[1].col = 1;
A.data[1].value = 2;
A.data[2].row = 2;
A.data[2].col = 2;
A.data[2].value = 3;
A.data[3].row = 3;
A.data[3].col = 3;
A.data[3].value = 4;
//初始化矩阵B
B.rows = 3;
B.cols = 3;
B.nums = 2;
B.data[1].row = 1;
B.data[1].col = 2;
B.data[1].value = 1;
B.data[2].row = 3;
B.data[2].col = 3;
B.data[2].value = 1;
printf("矩阵A为:\n");
for(int i=1; i<=A.nums; i++){
printf("%d %d %d\n", A.data[i].row, A.data[i].col, A.data[i].value);
}
printf("矩阵B为:\n");
for(int i=1; i<=B.nums; i++){
printf("%d %d %d\n", B.data[i].row, B.data[i].col, B.data[i].value);
}
return 0;
}
输出结果为:
矩阵A为:
1 1 2
2 2 3
3 3 4
矩阵B为:
1 2 1
3 3 1
在上面的示例中,我们定义了两个稀疏矩阵A和B,并使用三元组存储法将其存储起来,并输出了矩阵A和B。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现稀疏矩阵 - Python技术站