矩阵的三元组快速转置算法

保持热爱,奔赴山河

向量关系对应

在这里插入图片描述

三元组对应

在这里插入图片描述

完整代码

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1250  
 
#define    OK      1  
#define    ERROR   0  
#define    TRUE    1  
#define    FLASE   0  
 
typedef    int     Status;
typedef    int     ElemType;
 
 
// LZH_Create
 
typedef struct{
	int   i, j;       
	ElemType e;         
}Triple;
 
typedef struct{
	Triple   data[MAXSIZE + 1];        
	int      mu, nu, tu;            
}TSMatrix;
 
Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T)             
{                                                       
	T.mu = M.nu;
	T.nu = M.mu;
	T.tu = M.tu;
	if (T.tu)
	{
		int col;
		int num[100], cpot[100];
		for (col = 1; col <= M.nu; ++col)
			num[col] = 0;                 
		for (int t = 1; t <= M.tu; ++t)
		
			++num[M.data[t].j];         
		cpot[1] = 1;
		for (col = 2; col <= M.nu; ++col)
			cpot[col] = cpot[col - 1] + num[col - 1];        
		int q;
		for (int p = 1; p <= M.tu; ++p)
		{
			
			col = M.data[p].j;
			q = cpot[col];
			T.data[q].i = M.data[p].j;
			T.data[q].j = M.data[p].i;
			T.data[q].e = M.data[p].e;
			++cpot[col];
		}  
	} 
	return OK;
}//FastTransposeSMatrix  
 
Status main()
{
	TSMatrix M;
	TSMatrix T;
	printf("实验6 矩阵的压缩存储:稀疏矩阵的转置\n\n") ; 
	printf("请输入原矩阵的参数:\n");
	printf("矩阵的行数、列数: ");
	scanf("%d%d", &M.mu, &M.nu);
	printf("请输入非零元素: ");
	scanf("%d", &M.tu);
	printf("输入各个对应压缩值:\n");
	printf("a.data \n");
	printf("i j v \n");
	for (int i = 1; i <= M.tu; ++i)
		scanf("%d%d%d", &M.data[i].i, &M.data[i].j, &M.data[i].e);
 
	FastTransposeSMatrix(M, T);
 
	printf("转置后行数、列数、元素总数分别为:\n%d     %d     %d\n\n", T.mu, T.nu, T.tu);
	printf("\n");
	printf("b.data 为 \n");
	printf("| i     j     v |\n");
	for (int t = 1; t <= T.tu; ++t)
		printf("| %d     %d     %d |\n", T.data[t].i, T.data[t].j, T.data[t].e);

	return OK;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值