今天整了下稀疏矩阵相加,不是很难;
题目:

话不多说,代码如下:

#include<stdio.h>
#include<stdlib.h>#define MAXSIZE 1000
typedef struct{int row;//第几行
int col;//第几列
int e;//存储的值
}Triple;typedef struct
{Triple data[MAXSIZE];int m,n,len;//稀疏矩阵的行,列,非零元素的个数
}TSMatrix;void createTSMatrix(TSMatrix *A,TSMatrix *B)//创建矩阵
{    int i=1,j=1;     //data【0】未用scanf("%d %d %d %d",&A->m,&A->n,&A->len,&B->len);B->m=A->m;B->n=A->n;int a,b,c;for(int j=1;j<=A->len;j++){scanf("%d",&a);scanf("%d",&b);scanf("%d",&c);A->data[j].row=a;A->data[j].col=b;A->data[j].e=c;}for( i=1;i<=B->len;i++){scanf("%d",&a);scanf("%d",&b);scanf("%d",&c);B->data[i].row=a;B->data[i].col=b;B->data[i].e=c;}}
void EnterTriple(TSMatrix *D,int row,int col,int e)//提供数据相加模块
{D->len++;D->data[D->len].row=row;D->data[D->len].col=col;D->data[D->len].e=e;
}void SumMatrix(TSMatrix *A,TSMatrix *B,TSMatrix *C)//矩阵相加
{C->len=0;int i=1,j=1;while(i<=A->len&&j<=B->len){if(A->data[i].row<B->data[j].row){EnterTriple(C,A->data[i].row,A->data[i].col,A->data[i].e);//在一级函数里就调用的是地址,所以只用传C就够了,一定要注意!i++;}else if(A->data[i].row==B->data[j].row){if(A->data[i].col<B->data[j].col){EnterTriple(C,A->data[i].row,A->data[i].col,A->data[i].e);i++;}else if(A->data[i].col>B->data[j].col){EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e);j++;}else{if(B->data[j].e+A->data[i].e!=0)EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e+A->data[i].e);i++;j++;}}else{EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e);j++;}}while(i<=A->len){EnterTriple(C,A->data[i].row,A->data[i].col,A->data[i].e);i++;}while(j<=B->len){EnterTriple(C,B->data[j].row,B->data[j].col,B->data[j].e);j++;}}
void printMatrix(TSMatrix *C)//输出矩阵
{for(int i=1;i<=C->len;i++){printf("%d %d %d\n",C->data[i].row,C->data[i].col,C->data[i].e);}
}int main()
{TSMatrix A,B,C;createTSMatrix(&A,&B);SumMatrix(&A,&B,&C);printMatrix(&C);return 0;}

有个地方要注意,就是往一级函数里传的是地址,所以在函数里面用二级函数只用传变量名就行了(因为在函数里变量名就是地址了)
这道题相加时先判断行大小,小的先进;行一样时判断列,小的先进,再让行一样列大的进,再判断行列都一样时相加;
最后让没进的进去。

稀疏矩阵相加(C语言)相关推荐

  1. 顺序三元组 java_三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)

    不用十字链表也可以稀疏矩阵相加时间复杂度最坏情况达到O(tuA + tuB);思路比较简单就不赘述了,代码如下: 三元组: package 行逻辑链接的顺序表实现稀疏矩阵的相乘; public cla ...

  2. 力扣 两数相加 C语言 题解

    ** 力扣 两数相加 C语言 题解 ** 文章目录 力扣 两数相加 C语言 题解 一.完整题目 二.解题思路 二.编写代码 四.测评结果 五.总结评价 一.完整题目 给你两个非空的链表,表示两个非负的 ...

  3. 数据结构实践——稀疏矩阵相加

    本文针对数据结构基础系列网络课程(5):数组与广义表的实践项目. [项目 - 稀疏矩阵相加] 采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法 提示1:两个行数.列数相同的矩阵可以相加 提示2: ...

  4. 二维数组c语言矩阵加法,C 语言实例 – 两个矩阵相加 - C 语言基础教程

    C 语言实例 使用多维数组将两个矩阵相加. #include int main(){ int r, c, a[100][100], b[100][100], sum[100][100], i, j; ...

  5. c语言 字符相加_C语言中自加自减的编译原理

    自增自减规则 i++ 与 ++i 的主要区别有两个: 1. i++ 返回原来的值,++i 返回加1后的值. 2. i++ 不能作为左值,而++i 可以. 毫无疑问大家都知道第一点(不清楚的看下下面的实 ...

  6. c语言两个浮点数相加_C语言中两个浮点数或双精度数的模数

    c语言两个浮点数相加 As we know that modules also known as the remainder of the two numbers can be found using ...

  7. 电力系统:节点导纳矩阵的稀疏存储(稀疏矩阵)——C语言十字链表实现

    最近学习电力系统分析这门专业课,发现计算机分析在这门课上非常重要. 大电网的等值电路参数计算.导纳矩阵存储.潮流计算等都需要在电脑上编程实现. 打算试试用拿手的纯C来实现导纳矩阵的存储,也就是实现一个 ...

  8. 数组两个整数相加 c语言,作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)...

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  9. c语言实现稀疏矩阵乘法,C语言实现稀疏矩阵

    本文实例为大家分享了C语言实现稀疏矩阵的具体代码,供大家参考,具体内容如下 #include "stdio.h" #define maxsize 10 typedef struct ...

最新文章

  1. Neutron 网络基本概念
  2. c# 通过API启动外部程序
  3. Logstash配置总结和实例
  4. html显示高亮c++
  5. 【原】jQuery编写插件
  6. R语言分类算法之朴素贝叶斯分类(Naive Bayesian Classification)
  7. html播放flv直播源码,使用flv.js实现HTML5播放FLV视频文件
  8. 博图注册表删除方法_安装西门子软件反复提示重启电脑的解决方法
  9. 恶作剧:被乔布斯整蛊也很快乐
  10. centos服务器磁盘清理
  11. 快速核对两个表格数据
  12. Spring cloud oauth2搭建OAuth2.0授权服务
  13. 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
  14. 自动驾驶的疑点重重, 再次印证了科技的「非理性繁荣」
  15. 【洛谷】3957 跳房子
  16. 两个表格合并怎么做?
  17. 三点运算符(三点语法)
  18. 计算机主机机箱背后,2.8L的办公电脑?可以背在显示器后面的主机—你见过吗?...
  19. java形参和实参的三种传递方式(值传递,地址传递,引用传递)
  20. 安装ROS时遇到的一些坑,做个笔记方便自己查看

热门文章

  1. UI 一一 九宫格思想
  2. 先逆水寒后剑网3,国产游戏的光追饼缘何还没画完?
  3. 微信小程序转发微信小程序转发
  4. Vue项目点击刷新页面的三种方式
  5. 如何对颈椎进行保护.
  6. Oracle rownum函数
  7. iPhone 7/8plus 样式兼容性问题
  8. 【小程序】地图|绘制GPX轨迹
  9. gpx格式的文件如何导入ArcGIS
  10. 免费领取英特尔OpenVINO高级认证证书