[NOJ]数据结构实验2.1 稀疏矩阵转置

[NOJ]数据结构实验2.1 稀疏矩阵转置

在这里插入图片描述
在这里插入图片描述

		#include<stdio.h>
		#include<stdlib.h>
		
		typedef struct
		{
			int row,col;
			int e;
		}Triple;
		typedef struct
		{
			Triple *data;
			int m,n,len;
		}TSMatrix;
		
		void init(TSMatrix* M)   //读入数据
		{
			int m,n,i,j,e;
			Triple *p;
			M->data=(Triple*)malloc(sizeof(Triple)*1200);
			p=M->data;
			M->len=0;
			scanf("%d %d",&M->m,&M->n);
			while(1)
			{
				scanf("%d %d %d",&i,&j,&e);
				if(i==0&&j==0&e==0) break;
				M->data[M->len].row=i;
				M->data[M->len].col=j;
				M->data[M->len].e=e;
				M->len++;
			}
		}
		
		void trans(TSMatrix *A,TSMatrix *B)    //矩阵转置
		{
			B->data=(Triple*)malloc(sizeof(Triple)*A->len);
			B->len=A->len;
			int i,j,q;
			int *col,*pos;
			col=(int*)malloc(sizeof(int)*(A->n+1));
			pos=(int*)malloc(sizeof(int)*(A->n+1));
			for(i=0;i<A->n;i++) col[i]=0;
			for(i=0;i<A->len;i++) col[A->data[i].col]++;
			pos[0]=0;
			for(i=1;i<A->n;i++) pos[i]=pos[i-1]+col[i-1];
			for(i=0;i<A->len;i++)
			{
				j=A->data[i].col;q=pos[j];
				B->data[q].row=A->data[i].col;
				B->data[q].col=A->data[i].row;
				B->data[q].e=A->data[i].e;
				pos[j]++;
			}
		}
		int main()
		{
			TSMatrix *A,*B;
			A=(TSMatrix*)malloc(sizeof(TSMatrix));
			B=(TSMatrix*)malloc(sizeof(TSMatrix));
			init(A);
			trans(A,B);
			int i;
			for(i=0;i<B->len;i++)
			{
				printf("%d %d %d\n",B->data[i].row,B->data[i].col,B->data[i].e);
			}
			return 0;
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值