稀疏矩阵的三元组存储

输入一个 n×m 的整型数组,采用三元组压缩存储该数组,以每个整数按照两个字节存放计算原始数组和压缩存储后三元组所需存储空间大小。
1、输入n和m,中间以逗号分隔。
2、输入 n×m 数组元素,中间以一个空格分隔。
3、打印压缩后的三元组。
4、打印压缩前后的所需存储空间。

例如:

【输入】
6,10
0 1 0 2 0 0 0 0 5 0
3 0 0 0 0 0 0 9 0 0
0 0 0 0 0 6 0 0 0 0
8 0 0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0 0 0
0 0 0 7 0 0 0 0 0 0

【输出】
array[0,1]=1
array[0,3]=2
array[0,8]=5
array[1,0]=3
array[1,7]=9
array[2,5]=6
array[3,0]=8
array[3,8]=3
array[5,3]=7
Original array need 120 bytes.
The space needs 54 bytes after compress.


#include <stdio.h>
#define MAXSIZE 100

typedef struct{  //三元组结构体
    int i, j;   //该非零元的行下标和列下标
    int e;
}Triple;

typedef struct{      //矩阵的结构表示
    Triple data[MAXSIZE + 1];  //存储该矩阵中所有非0元素的三元组,data[0]未用
    int mu, nu, tu;  //矩阵的行数,列数和非零元个数
}TSMatrix;


int main() {
    TSMatrix M;
    int a, b;
    int array[MAXSIZE][MAXSIZE];
    int t = 0;
    scanf("%d,%d", &M.mu, &M.nu);
    for(a = 0; a < M.mu; a++)
        for(b = 0; b < M.nu; b++)
            scanf("%d", &array[a][b]);
 
    for(a = 0; a < M.mu; a++)
        for(b = 0; b < M.nu; b++){
            if(array[a][b] != 0){
                M.data[t].e = array[a][b];
                M.data[t].i = a;
                M.data[t].j = b;
                t = t + 1;
            }
        }
 
    for(a = 0; a < t; a++)
        printf("array[%d,%d]=%d\n", M.data[a].i, M.data[a].j, M.data[a].e);
    
    printf("Original array need %d bytes.\n", M.mu * M.nu * 2);
    printf("The space needs %d bytes after compress.\n", t * 3 * 2);
    return 0;
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

要告别理想怎算活過

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

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

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

打赏作者

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

抵扣说明:

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

余额充值