实现稀疏矩阵(采用三元组表示)的基本运算

#include <stdio.h>
#include<string.h>

/*-------
实现稀疏矩阵(采用三元组表示)的基本运算 
-------------*/ 

#define N 4
#define	MaxSize	100		//矩阵中非零元素的最多个数

//三元组定义: 存储每个非零元素所在位置 
typedef	struct{
	int r;		//行号
	int	c;		//列号
	int	d;		//元素值 
} TupNode;		

//三元组顺序表定义:记录二维数组形态【多少行,多少列】,以及非零元素总个数
typedef struct{
	int rows;	//行数值
	int cols;	//列数值
	int nums;	//非零元素个数
	TupNode	data[MaxSize]; 
}TSMatrix;

//产生稀疏矩阵A的三元组表示t
void CreatMat(TSMatrix &t,int A[N][N]){
	int i,j;
	t.rows=N;		//保存数组A的形态 
	t.cols=N;
	t.nums=0;		
	
	for(i=0;i<N;i++){	//遍历数组A,记录非0元素个数 
		for(j=0;j<N;j++)	
			if(A[i][j] != 0){
				t.data[t.nums].r = i;	//保存非零元素所在行
				t.data[t.nums].c = j;	//保存列;此处t.nums可作为当前非零元素对应所在三元组下标
				t.data[t.nums].d = A[i][j];		//保存元素值
				t.nums++; 
			}
	} 
	
} 

//输出三元组表示t
void DispMat(TSMatrix t){
	int i;
	if(t.nums <= 0)	
		return;
	printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);	//输出行数、列数、非零元素个数
	printf("\t--------------------\n");
	for(i=0;i<t.nums;i++){
		printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);
	} 
} 

int main(){
	int a1[N][N] = {{1,0,3,0},{0,1,0,0},{0,0,1,0},{0,0,1,1}};
	TSMatrix a;
	CreatMat(a,a1);
	DispMat(a);
	return 1;
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值