|
楼主 |
发表于 2022-4-25 20:17:43
|
显示全部楼层
步骤一,定义三元组存储的结构体类型
#include <stdio.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;
步骤二,实现稀疏矩阵的三元组存储
(1)建立三元组表
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)
{
/***完善下列代码****/
}
if(k) //if(k!=0)
{
/***完善下列代码***/
}
else
return FALSE;
}
(2)输出三元组表
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);
}
步骤三,编写主函数
int main(int argn,char *argv[])
{
int a[ROWS][COLMUNS];
int i,j;
TSMatrix *H=(TSMatrix *)malloc(sizeof(TSMatrix)); //创建压缩数组H
for(i=0;i< ROWS;i++) //输入二维数组的元素值
{
for(j=0;j< COLMUNS;j++)
{
scanf("%d",&a[i][j]);
}
}
CreateM(H,*a, ROWS, COLMUNS);
PrintM(H);
return 0;
}
步骤四,求压缩比
假设二维矩阵的元素个数为n,非零元素的个数为m,则稀疏矩阵的压缩存储的压缩比为:
&=(n* sizeof(ElemType))/(m*sizeof (Triple))
编写一个函数求压缩存储的压缩比
float compressionRatio(TSMatrix *M)
{
/****完善下列代码*****/
}
然后再主函数调用该函数,求压缩存储的压缩比,并输出结果。
int main(int argn,char *argv[])
{
int a[ROWS][COLMUNS];
int i,j;
TSMatrix *H=(TSMatrix *)malloc(sizeof(TSMatrix)); //创建压缩数组H
for(i=0;i< ROWS;i++) //输入二维数组的元素值
{
for(j=0;j< COLMUNS;j++)
{
scanf("%d",&a[i][j]);
}
}
CreateM(H,*a, ROWS, COLMUNS);
PrintM(H);
//调用压缩比函数,并输出结果
/****完善下列代码****/
return 0;
}
|
|