欢迎光临散文网 会员登陆 & 注册

三元组转置

2023-01-11 07:27 作者:就叫大嘴吧  | 我要投稿


#include <stdio.h>
#include <stdlib.h>
#define Max 100

//三元组结构体的定义 
typedef struct{
	// 非零元所在行、所在列 
	int row, col;
	// 非零元的值 
	int value;		
}Triple;
 
//三元组容器的定义 
typedef struct{
	// data[0] 未使用 
	Triple data[Max];
	// 矩阵为 m行、n列  
	int m, n;
	// 矩阵非零元个数
	int len; 
}TSMatrix;
 
//实现转置 
void TransposeSMatrix(TSMatrix A, TSMatrix &B){
	
	int i, col;
	// 矩阵 A m行、n列  转置为 矩阵 B n行、m列 
	B.m = A.n;
	B.n = A.m;
	B.len = A.len;
	// q 表示Triple数组下标,从 1 开始,data[0] 未使用  
	int q = 1;
	
	// col <= A矩阵的列数,控制的是 当前遍历的是 A矩阵的列  
	for(col = 1; col <= A.n; ++col){	
		// 每一次 遍历一遍 Triple数组 
		for(i = 1; i <= A.len; ++i){
			// 若 当前元素的列标 == col(矩阵 A 的第 col 列) 
			if(A.data[i].col == col){
				// A的列 转换为 B的行 
				B.data[q].row = A.data[i].col;
				// A的行 转换为 B的列 
				B.data[q].col = A.data[i].row;
				// 赋 非零元 的值 
				B.data[q].value = A.data[i].value;
				// 数组下标后移一位 
				++q;
			}
		}
	} 
}

void inputTSMatrix(TSMatrix &T){
	int i, j, value, k; 
	printf("请输入矩阵行数、列数:");
	scanf("%d %d", &T.m, &T.n);
	printf("请输入三元组 非零元个数:");
	scanf("%d", &T.len);
	for(k = 1; k <= T.len; k++){
		printf("请输入第 %d 个非零元:行 列 值:", k);
		scanf("%d %d %d", &i, &j, &value);
		T.data[k].row = i;
		T.data[k].col = j;
		T.data[k].value = value;
	}
}

void printTSMatrix(TSMatrix T){
	for(int i = 1; i <= T.len; ++i ){
		printf("%d	%d	%d\n", T.data[i].row, T.data[i].col, T.data[i].value);
	}
}

int main(){

	TSMatrix A,B;
	inputTSMatrix(A);

	TransposeSMatrix(A, B);

	printf("\n原始三元组为:\n");
	printTSMatrix(A);
	
	printf("\n转置后:\n");
	printTSMatrix(B);
	
	return 0;
}


三元组转置的评论 (共 条)

分享到微博请遵守国家法律