【矩阵压缩存储】输入一个4行4列的稀疏矩阵(元素值为整数),将其保存为3元组,并计算其压缩比。

压缩比的计算公式为:

【输入形式】依次输入4行4列的元素值,每个值用空格分开
【输出形式】假设有n个非零元,则每行输出一个三元组(每个值占4个字符,右对齐),再输出压缩比(保留两位小数)
【样例输入】

12 0 0 0

0 3 0 0

0 0 0 0

1 0 0 -20

【样例输出】

0 0 12

1 1 3

3 0 1

3 3 -20

1.33

代码实现:

#include <stdio.h>
#include<malloc.h>
#define OK 1
#define TRUE 1
#define FALSE 0
#define ROWS 4
#define COLMUNS 4
typedef int Status;
typedef int ElemType;
//三元组顺序表的类型定义
#define MAXSIZE 1000 
#define MAXRC 1000

//定义三元组存储的结构体类型
typedef struct
{ 
	int i,j;
	ElemType e;
}Triple;
typedef struct
{
	Triple data[MAXSIZE];
	int mu,nu,tu;
}TSMatrix;
//实现稀疏矩阵的三元组存储
		//建立三元表
Status CreateM(TSMatrix *M,int a[],int row,int col)
{
	int i;
int k=0; //保存非零元素个数

	for(i = 0;i < row*col;i++)
		if(a[i] != 0)
		{ 
		 M->data[k].i=i/col;
         M->data[k].j=i%col;
		 M->data[k].e=a[i];k++;
		}
	if(k) 
	{
		M->mu =row;
		M->nu=col;
		M->tu=k;
		return TRUE;
	}
	else
		return FALSE;
}	
//输出三元组表
void PrintM(TSMatrix* M)
{
	int k;	
	for(k = 0;k < M->tu;k++)
		printf("%4d%4d%4d\n",M->data[k].i,M->data[k].j,M->data[k].e);
	
}	
//求压缩比
float compressionRatio(TSMatrix *M)
{
	float i;
	i=((M->mu)*(M->nu)*1.0f*sizeof(ElemType)/((M->tu)*sizeof(Triple)));
	return i;
}
//然后在在主函数中调用该方法,求压缩存储的压缩比,并输出结果 
int main(int argn,char *argv[]) 
{
	int a[ROWS][COLMUNS];
  	int i,j;
  	TSMatrix *H=(TSMatrix *)malloc(sizeof(TSMatrix)); 
  	for(i=0;i< ROWS;i++)    //输入二维数组的元素值 
	{
		for(j=0;j< COLMUNS;j++)
		{			
			scanf("%d",&a[i][j]);
		}
	}
	
	CreateM(H,*a, ROWS, COLMUNS);
	PrintM(H);
	printf("%.2lf",compressionRatio(H));

	return 0;
	
}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单^不简单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值