普通稀疏矩阵压缩方式

普通稀疏矩阵压缩方式:

​ 采用三元组进行压缩

​ 三元组:有三个数据项:行、列、值 构成一个新整体,既可以顺序存储也可以链式存储三元组数据

c 复制代码
#include <stdio.h>
#include<stdbool.h>
#include<stdlib.h>

typedef struct Node
{
	int row;
	int lin;
	int val;
}Node;
typedef struct Trip
{
	Node *arr;//存储所有三元组元素
	int cnt;//元素个数
	int r_max;//列数
	int c_max;//行数
}Trip;


Trip *create_trip(int r,int c ,int (*arr)[c],int cnt)
{
	//申请内存空间并初始化
	Trip *trip=malloc(sizeof(Trip));
	trip->arr=malloc(sizeof(Node)*cnt);
	trip->cnt=cnt;
	trip->r_max=r;
	trip->r_max=c;
	//遍历待压缩的二维数组,存储非零元素到三元组中
	int index=0;
	for(int i=0;i<r;i++)
	{
		for(int j=0;j<c;j++)
			{
			if(arr[i][j])
			{
				trip->arr[index].row=i;
				trip->arr[index].lin=j;
				trip->arr[index++].val=arr[i][j];

			}
				
			}

	}
	trip->cnt=index;
	return trip;
}


int main(int argc,const char* argv[])
{
	int arr[7][8]={};
	for(int i=0;i<7;i++)
	{
		for(int j=0;j<8;j++)
		{
			int x=rand()%7;
			int y=rand()%8;
			arr[x][y]=rand()%10;

		}
	}
	for(int i=0;i<7;i++)
	{
		for(int j=0;j<8;j++)
		{
		printf("%d ",arr[i][j]);
			
		}

		printf("\n");
		
	}
	Trip *trip=create_trip(7,8,arr,10);
	for(int i=0;i<trip->cnt;i++)
	{
		printf("%d %d %d  \n",trip->arr[i].row,trip->arr[i].lin,trip->arr[i].val);	
		
		
		
	}
	


		
	return 0;
}
相关推荐
Anastasiozzzz2 小时前
深入研究Redis的ZSet底层数据结构:从 Ziplist 的级联更新到 Listpack 的完美救场
数据结构·数据库·redis
Eward-an2 小时前
LeetCode 1980 题通关指南|3种解法拆解“找唯一未出现二进制串”问题,附Python最优解实现
python·算法·leetcode
程序员酥皮蛋3 小时前
hot 100 第四十题 40.二叉树的层序遍历
数据结构·算法·leetcode
※DX3906※3 小时前
Java排序算法--全面详解面试中涉及的排序
java·开发语言·数据结构·面试·排序算法
木斯佳3 小时前
HarmonyOS 6实战:从爆款vlog探究鸿蒙智能体提取关键帧算法
算法·华为·harmonyos
Mr.朱鹏4 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
WJSKad12354 小时前
【DepthPro】实战教程:单目深度估计算法详解与应用
算法
wzqllwy5 小时前
8 大经典排序算法(Java 实现):原理 + Demo + 核心分析
java·算法·排序算法
We་ct5 小时前
LeetCode 77. 组合:DFS回溯+剪枝,高效求解组合问题
开发语言·前端·算法·leetcode·typescript·深度优先·剪枝
重生之我是Java开发战士5 小时前
【递归、搜索与回溯】二叉树中的深度优先搜索:布尔二叉树,求根节点到叶节点数字之和,二叉树剪枝,验证二叉搜索树,第K小的元素,二叉树的所有路径
算法·深度优先·剪枝