c语言三元组求矩阵加法,矩阵相加的算法(存储结构为三元组表)
假设稀疏矩阵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语言三元组求矩阵加法,矩阵相加的算法(存储结构为三元组表)相关推荐
- c语言 A21—求3*5矩阵每列最大值,输出矩阵和最大值
c语言 A21-求3*5矩阵每列最大值,输出矩阵和最大值 题目:求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出. #include<stdio.h> int main( ...
- C语言 A22—求3*5矩阵每行最大值,并输出矩阵和最大值
C语言 A22-求3*5矩阵每行最大值,并输出矩阵和最大值 题目:求一个3*5的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出. #include<stdio.h> int main ...
- 矩阵加法 矩阵乘法 Python123题解 不使用numpy
矩阵加法 新建两个矩阵A和B,两个矩阵的数据为 ...
- 数据结构 实验14(1-2班):(深入理解索引存储结构)三元组存储的稀疏矩阵建立行列索引并求鞍点
目录 前言: 需求分析: 难点分析: 代码和思路详解: 三元组表的头文件: 建立索引思路: 什么是三元组表的索引: 结合题意实现索引表: 建立索引表的代码实现: 索引表的结构体定义: 索引表的创建思路 ...
- 请输入30名同学的c语言成绩,求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共有30名学...
问题描述: 求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共有30名学 求大神帮忙做这几道结构体的c语言!今天就要交实验报告!急啊急!!!!! (1)一个班级共 ...
- c语言编程求导纳矩阵,电力系统短路故障的计算机算法程序设计
电力系统短路故障的计算机算法程序设计 电力系统分析课程设计报告书 题目: 电力系统短路故障的计算机算法程序设计 专 业:电气工程及其自动化 班 级: 学 号: 学生姓名: 指导教师: 2012年 3 ...
- 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表
前言 在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率. 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战 ...
- 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树
二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...
- 三元组法矩阵加法java_C语言实现矩阵加法、减法、乘法和数乘运算
一.知识储备 • 矩阵与矩阵之间可以进行加法.减法和乘法运算(矩阵的"除法",被特别地定义出了逆矩阵,通过一个矩阵与另一个的逆矩阵的乘法来实现),矩阵和数之间可以进行数乘运算: • ...
最新文章
- 稳扎稳打Silverlight(29) - 2.0Tip/Trick之Cookie, 自定义字体, 为程序传递参数, 自定义鼠标右键...
- emwin自定义消息问题
- 锅巴H264播放器地址和说明
- 【经验】Qt项目开发必备工具
- 信息学奥赛一本通 1178:成绩排序 | OpenJudge NOI 1.10 03:成绩排序
- 在数据库中如何查询表的创建时间?
- Java集合详解2:LinkedList和Queue
- 信号与系统 拉普拉斯变换
- 这届抢票软件为什么不行?
- 「Head First」编程系列丛书
- 如何开启计算机cpu虚拟化,win10如何开启虚拟化支持_win10开启cpu虚拟化的方法
- SAP培训行业权威评测---51sap培训评测网(www.51sap.net)
- php 静态变量 引用,PHP的返回引用(方法名前加)和局部静态变量(static)
- MAC OS X mountain lion强制关机
- 最新亲测仿悬赏猫牛帮任务平台源码完美运营+支持封装APP
- ElasticSearch实战系列十一: ElasticSearch错误问题解决方案
- 御坂御坂题解(出自北航校赛) 约瑟夫环问题高效解决方案
- c语言程序冒号的作用是什么,C语言里面的冒号
- 将Raspberry Pi用作台式PC的17个最佳Raspbian应用
- 更好的设计接口_陷入更好的设计