矩阵是带二维信息的数据,一般采用二维数组来存储。但是稀疏矩阵的有效信息数据不多,绝大多数都是无效信息不需要存储,这些矩阵如果使用二维数组来存储的话,会非常浪费存储空间,为了节约空间,我们对这些矩阵进行压缩。
1、三元组压缩
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node
{
int row;
int col;
int val;
}Node;
typedef struct Triplet
{
Node *arr;//存储所有三元组的元素
int cnt;//元素个数
int r_max;//数组行数
int c_max;//数组列数
}Triplet;
Triplet *create_triplet(int r,int c,int(*arr)[c],int cnt)
{
//申请内存空间并初始化
Triplet *triplet=malloc(sizeof(Triplet));
triplet->arr=malloc(sizeof(Node)*cnt);
//triplet->cnt=cnt;
triplet->r_max=r;
triplet->c_max=c;
//遍历待压缩的二位数组,存储非零元素到三元组数组中
int index=0;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(arr[i][j])
{
triplet->arr[index].row=i;
triplet->arr[index].col=j;
triplet->arr[index++].val=arr[i][j];