二维数组用三元组压缩时的转置和基本运算(加减乘)

三元组压缩

在之前的博客《数组的压缩存储》中提到过,对于一个稀疏矩阵我们可以采用三元组的方式来进行压缩,即存储行、列、数值信息这三元来代替一个二维数组。
之前博客的截图:
在这里插入图片描述

转置

将一个二维数组的每一个数据的行列信息对调得到的新矩阵就是原矩阵的转置。
如矩阵:
0 0 0 1
1 0 0 2
0 0 1 2
变成:
0 1 0
0 0 0
0 0 1
1 2 2
的过程就是求转置的过程。

  1. 转置矩阵的行列数和之前的列行数相同,则有可能后来的数组格式和之前不同,所以需要采用新的数组或者采用压缩存储方式来存储新的数组。
  2. 另外如果简单的把三元组中的行列数据调换,那么这个博客就失去了意义,因为原来的数据为有序的,所以我们在调换之后也要保证有序
    (所谓的有序是指按行的顺序存储每一个结点)

方法一:循环查找

struct three
{
   
   
	int col,row;
	int data;
}

struct TSMatrix
{
   
   
	struct three data[MAXNUM+1];
	 //maxnum是自己define的一个数值,表示这个数组最大有多少个非零元 ,+1则将第一个位置空出来
	 int c_num, r_num;//二维数组列数、行数
	 int number;	  //二维数组的非零元个数
}

struct TSMatrix Transpose(struct TSMatrix M)
{
   
   
	struct TSMatrix T;
	T.c_num = M.r_num;
	T.r_num = M.c_num;
	T.number=M.number;//初始化
	
	if(T.number)
	{
   
   
		int p=1, q=1;
		for(int col = 1; col <= M.c_num; col++)//按行来寻找
			for(; p <= M.number; p++)//对每一个三元组
				if(M.data[p].col == col)
				{
   
   
					T.data[q].row = M.data[p].col;
					T.data[q
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值