『西工大-数据结构-NOJ』 012-以三元组表为存储结构实现矩阵相加(耿5.7) 『西北工业大学』

在这里插入图片描述
在这里插入图片描述

解题思路:

这道题要求用三元组表的储存结构储存稀疏矩阵,并进行加法运算。
首先我们要了解一下为什么要用三元组表,对于一个稀疏矩阵,尤其是高维度时,如果以多维数组的形式开辟空间,会造成很大的不必要空间浪费,于是我们用三元组表,只存储稀疏矩阵中的非零元素,来达到储存稀疏矩阵的目的。
常见的三元组和三元组表的宏定义如下:

typedef struct{
   //定义三元组
    int i,j;
    int val;
}Triple;

typedef struct{
   //定义三元组表
    Triple *data;//多个三元组
    int mu,nu,tu;//最大行,最大列,有效元素个数
}TSMatrix;

再进行三元组操作的时候很重要的的一点是要注意三元组表的规范性,即三元组表中的三元组储存次序是按照:①行由低到高;②列由低到高 来储存的。
故本题的难点在于在进行三元组表储存到稀疏矩阵的加法运算时,不仅要利用旧三元组表的规范性,而且还要保证新三元组表的规范性,为实现这些我们要在加法运算中进行全面的分类执行。
具体操作见代码,代码中有部分注释。

题解代码:

#include<stdio.h>
#include<stdlib.h>

typedef struct{
   //定义三元组
    int i,j;
    int val;
}Triple;

typedef struct{
   //定义三元组表
    Triple *data;//多个三元组
    int mu,nu,tu;//最大行,最大列,有效元素个数
}TSMatrix;

void CreatTSMatrix(TSMatrix *p,int n){
   //申请一个容量为n的三元组表
    p->data = (Triple*)malloc(sizeof(Triple)*n);
    p->tu = n;
}

void AddTwoTSMatrix(TSMatrix *A, TSMatrix *B, TSMatrix *C){
   
    int i=0,j=0,sum,C_tu=0;
    while(i<A->tu && j<B->tu
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值