基本概念

在学习线性代数的时候,经常用到矩阵。在C语言中,表示矩阵的最直观形式就是二维数组。然而在实际应用中,很多高阶矩阵中的非零元素非常少,这个时候如果继续使用二维数组存储,那么就会浪费很多存储空间。

在数据结构中,我们用三元组存储稀疏矩阵。三元组定义为(i,v,j),这三个值一次表示矩阵的行、列、值。

有了基本的概念之后,就可以定义数据结构了

定义一个结构体,来表示三元组的基本属性

typedef struct
{int row, col;int e;
}Triple;

然后再定义一个存储容器,用来存放三元组的

为了简单起见,我们用数组来实现,并定义最大存储单元MAXSIZE为100

typedef struct
{Triple data[MAXSIZE];Int m,n,len;
}TSMatrix;
//(TSMatrix表示 Triple Sparse Matrix)

实现矩阵的转置
         实现用三元组表示的矩阵的转置,可以直接把行列互换,然后再执行按行序为主的排序过程。为了避免重新排序引起的元素移动,可以采用列序递增转置法。

具体做法,就是遍历列的下表值,从列数低的值到列数高的值,依次添加到缓存三元组中。很显然,这是一个双重for循环结构,内层循环实现遍历整个表,寻找合适的列。外层循环,则记录要寻找的列数。

//实现转置
void TransposeTSMatrix(TSMatrix A, TSMatrix* B)
{int i,j,k;B->m = A.n;B->n = A.m;B->len = A.len;j=0;for( k=0; k<A.len; ++k){for( i=0; i<A.len; ++i){if(A.data[i].col == k){B->data[j].row = A.data[i].col;B->data[j].col = A.data[i].row;B->data[j].e = A.data[i].e;++j;}}}}

有了上面的基础,就可以写一个带有测试驱动的函数

完整代码

#include <stdio.h>
#define MAXSIZE 100
//三元组的定义
typedef struct
{int row, col;//表示行列 int e;     //表示值
}Triple;//三元组容器的定义
typedef struct
{Triple data[MAXSIZE];int m,n,len;
}TSMatrix;//实现转置
void TransposeTSMatrix(TSMatrix A, TSMatrix* B)
{int i,j,k;B->m = A.n;B->n = A.m;B->len = A.len;j=0;for( k=0; k<A.len; ++k){for( i=0; i<A.len; ++i){if(A.data[i].col == k){B->data[j].row = A.data[i].col;B->data[j].col = A.data[i].row;B->data[j].e = A.data[i].e;++j;}}}}//测试驱动函数
int main()
{//将输入重定向到根目录下的data.txt freopen("data.txt", "r", stdin);TSMatrix A,B;int i,j,e; int k=0;printf("请输入三元组:");while(scanf("%d%d%d", &i, &j, &e)!=EOF){A.data[k].row = i-1;A.data[k].col = j-1;A.data[k].e = e;A.len = ++k;}printf("\n原始三元组为:\n");for(i=0; i<A.len; ++i ){printf("%3d%3d%3d\n", A.data[i].row+1, A.data[i].col+1, A.data[i].e);}printf("\n转置后:\n");TransposeTSMatrix(A, &B);for(i=0; i<B.len; ++i ){printf("%3d%3d%3d\n", B.data[i].row+1, B.data[i].col+1, B.data[i].e);}return 0;
}

程序截图

用三元组存储稀疏矩阵并实现转置相关推荐

  1. 用三元组存储稀疏矩阵及其快速转置

    用三元组存储稀疏矩阵及其快速转置 稀疏矩阵的三元组存储方式 快速转置算法 代码 稀疏矩阵的三元组存储方式 稀疏矩阵可以用一个三元组数组表示,数组每个元素是一个三元组,三元组形式为 (矩阵行号,矩阵列号 ...

  2. 用三元组存储稀疏矩阵,实现其快速转置c语言代码,稀疏矩阵三元组表快速转置(C语言实现)...

    本来准备昨天下午写的,但是因为去参加360众测靶场的考核耽搁了,靶场的题目还是挺基础的. 继续学习吧. 使用黑色墨水在白纸上签名就像由像素点构成的稀疏矩阵.如图4所示. 图4手写体签名 [问题]请将以 ...

  3. 利用三元组对稀疏矩阵进行压缩存储并实现矩阵的转置运算

    我们假设在m*n的矩阵中,有t个元素不为0,令a=t/(m*n),称a为矩阵的稀疏因子,通常认为a<=0.05时称为稀疏矩阵. 为了节省存储空间,我们对稀疏矩阵进行压缩存储--只存储稀疏矩阵的非 ...

  4. 稀疏矩阵的三元组存储及快速转置

    问题描述 [问题描述] 实现稀疏矩阵的三元组表存储和快速转置运算. [输入形式] 输入一个整型的6阶稀疏矩阵. [输出形式] 输出稀疏矩阵的三元组表形式,使用快速转置方法进行转置运算,输出辅助数组nu ...

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

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

  6. 用三元组实现稀疏矩阵的转置

    内容: 设m*n的矩阵中有t个非零元素且t<<m*n,这样的矩阵成为稀疏矩阵,在存储稀疏矩阵时,按照常规方法存储时相当浪费内存,因此提出另外一种存储方法,即只存储非零元素,但在这类矩阵中, ...

  7. 矩阵-----对称矩阵及其压缩存储稀疏矩阵

    什么是对称矩阵(SymmetricMatrix)? 对称对称-------看 设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 & ...

  8. 5.3矩阵乘积(三元组存储结构)

    行逻辑链表的顺序表 为了便于随机存取任意一行的非零元,则需要知道每一行的第一个非零元在三元组表中的位置.为此,可将上节快速转置矩阵中的算法创建的,指示"行"信息的辅助数组cpot固 ...

  9. 十字链表 java_十字链表法,十字链表压缩存储稀疏矩阵详解

    对于压缩存储稀疏矩阵,无论是使用三元组顺序表,还是使用行逻辑链接的顺序表,归根结底是使用数组存储稀疏矩阵.介于数组 "不利于插入和删除数据" 的特点,以上两种压缩存储方式都不适合解 ...

最新文章

  1. [JAVA] DUMP
  2. 本周ASP.NET英文技术文章推荐[03/11 - 03/17]
  3. 全球与中国自行车和零件制造市场发展规划及未来投资趋势展望报告2021年版
  4. 【Python】 文件和操作文件方法
  5. C#制作、打包、签名、发布Activex全过程
  6. 云服务器安装其他版本系统,云服务器安装自己的系统版本
  7. AndroidOpenCV摄像头预览全屏问题
  8. 【2019年天梯赛L2-029】特立独行的幸福(模拟)
  9. uwp浏览器java源码_从网站打开UWP应用程序
  10. 6个Web前端值得收藏很实用的菜单模板(上)
  11. php 利用gd库及tcpdf 自动多图片生成pdf
  12. ABAP clear、refresh、free的区别
  13. CentOS 7搭建Yunzai-Bot原神机器人
  14. 【注意力机制】BAM: Bottleneck Attention Module论文理解
  15. 哪里有云南ip服务器,云南那些服务商可以提供云南本地ip服务器
  16. 数据库的故障及其恢复策略
  17. 设计一个长方体类Cuboid
  18. landlord攻略_全攻略:在卡尔加里如何当好房东-之(三)合同篇
  19. 【待研究】THP对fork速度的影响
  20. 一口气笑穿极简印度史,简到崩溃,笑到流泪(一)

热门文章

  1. 电磁继电器工作原理透彻详解(1)
  2. 服务都要上K8s,怎么打造一个自动部署K8s的Git流水线?
  3. [ MSF使用实例 ] 利用远程桌面代码执行漏洞(MS12-020)漏洞导致windows靶机蓝屏
  4. 【LeetCode题解】198. House Robber
  5. python学习之高阶函数
  6. 使用 Docker 制作一个盒装部落格
  7. 小程序加入人脸识别_【提示】@车墩志愿者们 身份证+人脸识别 “志愿云自助服务”微信小程序上线 再也不用担心忘记用户名密码了...
  8. 通过Hbuilder X创建uni-app项目并引入UView
  9. codeforces 700E
  10. Type C --- 引脚图解