假设稀疏矩阵A和B均以三元组表作为存储结构。试写出矩阵相加的算法,另设三元组表C存放结果矩阵。

稀疏矩阵的三元组顺序表类型TSMatrix的定义:

#define MAXSIZE 20 // 非零元个数的最大值

typedef struct {

int i,j; // 行下标,列下标

ElemType e; // 非零元素值

}Triple;

typedef struct {

Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用

int mu,nu,tu; // 矩阵的行数、列数和非零元个数

}TSMatrix;实现函数如下:

Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C)

/* 三元组表示的稀疏矩阵加法: C=A+B */

{

int ai,bi,ci,aj,bj,cj,ap,bp,cp;

ap = bp = cp = 1;

if(A.mu != B.mu || A.nu != B.nu){

return ERROR;

}

C.mu = A.mu;

C.nu = A.nu;

while(ap <= A.tu && bp <= B.tu){

ai = A.data[ap].i;

bi = B.data[bp].i;

if(ai > bi){

ci = bi;

while(ci == B.data[bp].i){

C.data[cp].i = ci;

C.data[cp].j = B.data[bp].j;

C.data[cp].e = B.data[bp].e;

++bp;

++cp;

}

}else if(ai < bi){

ci = ai;

while(ci == A.data[ap].i){

C.data[cp].i = ci;

C.data[cp].j = A.data[ap].j;

C.data[cp].e = A.data[ap].e;

++ap;

++cp;

}

}else if(ai == bi){

ci = ai;

aj = A.data[ap].j;

bj = B.data[bp].j;

if(aj > bj){

C.data[cp].i = ci;

C.data[cp].j = bj;

C.data[cp].e = B.data[bp].e;

++cp;

++bp;

}else if(aj < bj){

C.data[cp].i = ci;

C.data[cp].j = aj;

C.data[cp].e = A.data[ap].e;

++cp;

++ap;

}else if(aj == bj){

if(A.data[ap].e + B.data[bp].e != 0){

C.data[cp].i = ci;

C.data[cp].j = aj;

C.data[cp].e = A.data[ap].e + B.data[bp].e;

++cp;

}

++ap;

++bp;

}

}

}

//以上为稀疏矩阵A或B中的元素完全加完的情况

//以下为稀疏矩阵A或B中的元素部分剩余的情况

while(ap <= A.tu){

C.data[cp].i = A.data[ap].i;

C.data[cp].j = A.data[ap].j;

C.data[cp].e = A.data[ap].e;

++cp;

++ap;

}

while(bp <= B.tu){

C.data[cp].i = B.data[bp].i;

C.data[cp].j = B.data[bp].j;

C.data[cp].e = B.data[bp].e;

++cp;

++bp;

}

C.tu = --cp;

return OK;

}

c语言三元组求矩阵加法,矩阵相加的算法(存储结构为三元组表)相关推荐

  1. c语言 A21—求3*5矩阵每列最大值,输出矩阵和最大值

    c语言 A21-求3*5矩阵每列最大值,输出矩阵和最大值 题目:求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出. #include<stdio.h> int main( ...

  2. C语言 A22—求3*5矩阵每行最大值,并输出矩阵和最大值

    C语言 A22-求3*5矩阵每行最大值,并输出矩阵和最大值 题目:求一个3*5的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出. #include<stdio.h> int main ...

  3. 矩阵加法 矩阵乘法 Python123题解 不使用numpy

    矩阵加法 新建两个矩阵A和B,两个矩阵的数据为‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭ ...

  4. 数据结构 实验14(1-2班):(深入理解索引存储结构)三元组存储的稀疏矩阵建立行列索引并求鞍点

    目录 前言: 需求分析: 难点分析: 代码和思路详解: 三元组表的头文件: 建立索引思路: 什么是三元组表的索引: 结合题意实现索引表: 建立索引表的代码实现: 索引表的结构体定义: 索引表的创建思路 ...

  5. 请输入30名同学的c语言成绩,求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共有30名学...

    问题描述: 求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共有30名学 求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共 ...

  6. c语言编程求导纳矩阵,电力系统短路故障的计算机算法程序设计

    电力系统短路故障的计算机算法程序设计 电力系统分析课程设计报告书 题目: 电力系统短路故障的计算机算法程序设计 专 业:电气工程及其自动化 班 级: 学 号: 学生姓名: 指导教师: 2012年 3 ...

  7. 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表

    前言 在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率. 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战 ...

  8. 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树

    二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...

  9. 三元组法矩阵加法java_C语言实现矩阵加法、减法、乘法和数乘运算

    一.知识储备 • 矩阵与矩阵之间可以进行加法.减法和乘法运算(矩阵的"除法",被特别地定义出了逆矩阵,通过一个矩阵与另一个的逆矩阵的乘法来实现),矩阵和数之间可以进行数乘运算: • ...

最新文章

  1. 稳扎稳打Silverlight(29) - 2.0Tip/Trick之Cookie, 自定义字体, 为程序传递参数, 自定义鼠标右键...
  2. emwin自定义消息问题
  3. 锅巴H264播放器地址和说明
  4. 【经验】Qt项目开发必备工具
  5. 信息学奥赛一本通 1178:成绩排序 | OpenJudge NOI 1.10 03:成绩排序
  6. 在数据库中如何查询表的创建时间?
  7. Java集合详解2:LinkedList和Queue
  8. 信号与系统 拉普拉斯变换
  9. 这届抢票软件为什么不行?
  10. 「Head First」编程系列丛书
  11. 如何开启计算机cpu虚拟化,win10如何开启虚拟化支持_win10开启cpu虚拟化的方法
  12. SAP培训行业权威评测---51sap培训评测网(www.51sap.net)
  13. php 静态变量 引用,PHP的返回引用(方法名前加)和局部静态变量(static)
  14. MAC OS X mountain lion强制关机
  15. 最新亲测仿悬赏猫牛帮任务平台源码完美运营+支持封装APP
  16. ElasticSearch实战系列十一: ElasticSearch错误问题解决方案
  17. 御坂御坂题解(出自北航校赛) 约瑟夫环问题高效解决方案
  18. c语言程序冒号的作用是什么,C语言里面的冒号
  19. 将Raspberry Pi用作台式PC的17个最佳Raspbian应用
  20. 更好的设计接口_陷入更好的设计

热门文章

  1. dN/dS与分子进化常用软件
  2. 【c语言跟练】翁恺-跟学笔记-课堂练习
  3. 帝国时代3java_帝国时代III之亚洲王朝完美BT版
  4. 海外版抖音TikTok实战,30天增粉45w+?
  5. CSDN是如何劝退我们的
  6. HDU 3507 Print Artical
  7. 小和尚和老和尚取水问题
  8. ZSS 协议在随机谕言机下的安全证明 内容小结
  9. 如何了解 ![CDATA[ ]]的作用?
  10. CNN实战分类猫与狗图片