行逻辑连接顺序表

采用一位三元结构体组记录的每一个元素在矩阵中的具体位置,采用一维数组记录每行第一个非元素的位置,具有记录行数,列数和非元素总个数的结构体成员变量。

算法思想

逐行求积,每次处理一行,设立一个一维数组ctemp对应乘积结果中的对应行元素构成的数组。

将前乘矩阵M当前行的非0元素找到对应在后乘矩阵N中的对应行,依次去乘其行中每一列的非0元素,然后累加到ctemp对应的元素的位置上。

每行运算结束进行压缩存储到矩阵Q中。

注意事项

本示例中将矩阵的行号和列号与所用数据结构对应,因此三元顺序组和储存行信息的数组下标为0的位置属于浪费位置,可通过修改代码中部分变量的值更正。

以下为可运行源码,内含例子验证正确性。

#include <stdio.h>
const int  MAXSIZE = 100;//最多非0元素个数
const int  MAXRC = 100;//矩阵最多行数
typedef int ElemType;
typedef struct{int i,j;ElemType e;
}Triple;
typedef struct{Triple data[MAXSIZE+1];//非0三元组表int rpos[MAXRC+1];//各行第一个非0元的位置表 int mu,nu,tu;//矩阵行数、列数与非0元素个数
}RLSMatrix;
//行逻辑连接的矩阵M*N算法函数
int MultSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix &Q){int ccol=0;//行累加器 //可运算性判断 if(M.nu!=N.mu)return -1;//Q的初始化 Q.mu=M.mu;Q.nu=N.nu;Q.tu=0;//Q为非0矩阵才有运算必要if(M.tu*N.tu!=0) {//当前处理的M的行标 int arow;//按行处理,arow即是前乘矩阵M的行号也是结果矩阵Q的行号 for(arow=1;arow<=M.mu;++arow) {//行元素累加器清0 int ctemp[M.nu]={0};//每计算 一行设置当前行的第一个非0元素位置为之前行所有非0 元素之和+1 Q.rpos[arow]=Q.tu+1;//当前行的下一行第一个非0元素在M.data中的位置,如果是最后一行取所有的非0元素之和+1 int tp=0;if(arow<M.mu)tp=M.rpos[arow+1];else{tp=M.tu+1;} int p=0;int q=0;int t=0; //对当前行的每一个非0元素处理 计算其对应的位置乘积和 int brow=0;for(p=M.rpos[arow];p<tp;++p) {//找到该元素对应的N的行号 brow = M.data[p].j;//取找到的N对应行下一行第一个元素的位置,如果是最后一行取所有的非0元素之和+1  if(brow<N.mu)t=N.rpos[brow+1];elset=N.tu+1;//N对应行位置上的元素与M当前位置元素相乘,累加进入ctemp行累加器对应位置 for(q=N.rpos[brow];q<t;++q){ccol=N.data[q].j;ctemp[ccol]+=M.data[p].e*N.data[q].e;}   }//累加器上对应位置压缩存储 for(ccol=1;ccol<=Q.nu;++ccol){if(ctemp[ccol]){if(++Q.tu>MAXSIZE)return -1;Q.data[Q.tu].i=arow;Q.data[Q.tu].j=ccol;Q.data[Q.tu].e=ctemp[ccol];}}}Q.rpos[arow]=Q.tu+1;}return 1;
}
int main(){RLSMatrix M={{{0,0,0},{1,1,3},{1,4,5},{2,2,-1},{3,1,2}},{0,1,3,4,5},3,4,4};RLSMatrix N={{{0,0,0},{1,2,2},{2,1,1},{3,1,-2},{3,2,4}},{0,1,2,3,5},4,2,4};RLSMatrix M0={{{0,0,0},{1,1,1},{1,2,2},{1,3,3},{2,1,4},{2,2,5},{2,3,6}},{0,1,4,0},2,3,6};RLSMatrix N0={{{0,0,0},{1,1,1},{1,2,2},{2,1,3},{2,2,4},{3,1,5},{3,2,6}},{0,1,3,5,0},3,2,6};RLSMatrix Q;MultSMatrix(M0,N0,Q);for(int i=1;i<=Q.tu;i++)printf("%4d%4d%4d\n%5d\n%5d%5d%5d\n%5d\n\n",Q.data[i].i,Q.data[i].j,Q.data[i].e,Q.rpos[i],Q.mu,Q.nu,Q.tu,i);}

行逻辑连接的顺序表实现稀疏矩阵乘法相关推荐

  1. 行逻辑链接的顺序表(压缩存储稀疏矩阵)详解

    前面学习了如何使用三元组顺序表存储稀疏矩阵,其实现过程就是将矩阵中各个非 0 元素的行标.列标和元素值以三元组的形式存储到一维数组中.通过研究实现代码你会发现,三元组顺序表每次提取指定元素都需要遍历整 ...

  2. 用顺序表实现学生信息管理系统

    用顺序表实现学生信息管理系统 问题描述: 定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息: (2) 逐个显示学生表中所有学生的相关信息 ...

  3. 约瑟夫环c语言代码顺序存储,顺序表实现约瑟夫环地问题,C语言.doc

    顺序表实现约瑟夫环地问题,C语言 计算机科学与工程学院 PAGE PAGE 2 <算法与数据结构>试验报告 计算机科学与工程学院 <算法与数据结构>试验报告[一] 专业班级 1 ...

  4. 顺序表实现学生管理系统

    定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息: (2) 逐个显示学生表中所有学生的相关信息: (3) 根据姓名进行查找,返回此 ...

  5. 顺序表讲解和顺序表实现增删查改

    前言 顺序表是一种参见的数据结构 特点:类似数组的储存,需要预先开辟空间已备数据插入.(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了 ...

  6. 第五章(3)行逻辑链接的顺序表

    //三元组顺序表又称有序的双下标法,它的特点是:非零元在表中按行序列有序存储,因此便于进行依行顺序处理的矩阵运算.//然而若需要按行号存取某一行的非零元,则需要从头开始查找.//为便于随机存取任意一行 ...

  7. 【数据结构】顺序表实现超详解(保姆级教程)

    [数据结构] 目录 ​ 前言 顺序表 接口实现 各项功能 接口详解 顺序表初始化 顺序表释放 顺序表展示 顺序表容量检查 顺序表数据尾插 顺序表数据头插 顺序表数据前删 顺序表数据尾删 顺序表数据查找 ...

  8. 顺序表实现图书管理系统增删改查

    顺序表学习: 这个程序是用于学习数据结构而参考数据结构C语言第二版的教材实现的一个简易的图书管理系统. 逻辑结构:顺序表 线性表的顺序存储又称作顺序表.由一组地址连续的存储单元依次存储线性表的数据元素 ...

  9. 栈——用顺序表实现栈操作

    一.线性表特点 线性表:由0个或者多个数据元素组成的有限序列 除了第一个节点(头节点),都有前驱节点 除了最后一个节点(尾节点),都有后继节点 线性表主要由顺序存储结构或者链式存储结构 一般线性表:可 ...

最新文章

  1. 1010 Radix
  2. Google AI的焦虑:拆分搜索和人工智能部门,Jeff Dean任AI业务负责人
  3. html中如何修改href,在html中设置href链接中的变量
  4. php bdecode,PHP base64_encode和base64_decode 编码/解码url
  5. android京东加入购物车效果,京东360buy 手机项目的“加入购物车”动画效果研究...
  6. Redis击穿、雪崩、穿透场景描述与解决方案
  7. 数据库SQL语句学习笔记(4)-过滤数据
  8. 7-1 抓老鼠啊~亏了还是赚了? (20 分)
  9. BZOJ 3505 [Cqoi2014]数三角形(组合数学)
  10. 上周五,小编参加了一场高大上的“9”会
  11. linux 一次执行多条命令
  12. 制药企业核算报表系统整体方案
  13. 【图像融合】基于matlab IHS变换与自适应区域特征遥感图像融合【含Matlab源码 1636期】
  14. win10配置ffmpeg环境
  15. Android使用文件管理器打开指定文件夹,浏览里面的内容
  16. PHP将图片和文字合成到一张背景图上
  17. uniapp - 电商优购项目
  18. 2018北航计算机 北理工计算机夏令营经验分享
  19. 网易 七鱼 面试 java_reactJs微信端接入网易七鱼客服
  20. 图片上传和显示——上传图片——上传文件)==ZJ

热门文章

  1. POJ1251丛林之路题解
  2. 恐怖丛林肉搏怎么玩 星星系统
  3. 计算机教学质量提升,浅析中等专业学校计算机教学质量提升策略
  4. 编译时多态、运行时多态
  5. 一切笔直都是骗人的 —— 2020 年产品沉思录卷首语摘录
  6. 计算机网络实验入门一
  7. 2021.3.17丨致病菌毒力因子(VFDB)数据库注释
  8. 前端websockt可重连功能的插件
  9. 【郭林专刊】自信还是危机感
  10. 腾讯地图初始化以及解析和逆解析