c语言 三原矩阵与稀疏矩阵的转换

//转置后的三元表没有调节列高低次序的能力,所以说输入的时候应该遵守三元表行列都是由小到大的规则
#include"stdio.h"
#define maxsize 10
typedef struct
{
	int i,j;//行,列
	int v;//压缩之后每行的数值
}link1;
typedef struct
{
	int m,n,t;//行数,列数,数值的个数
	link1 data[maxsize];//列数
}link2;

void shuru(link2 *s)
{
	int i;
	printf("请输入非零元素行数:\t");
	scanf("%d",&s->m);
	printf("请输入非零元素列数:\t");
	scanf("%d",&s->n);
	printf("请输入非零元素的个数:\t");
	scanf("%d",&s->t);
	if(s->t!=0&&s->t<=maxsize-1)
	{
		for(i=1;i<=s->t;i++)
		{
			printf("输入第%d个元素的行下标:",i);
			scanf("%d",&s->data [i].i);
			printf("输入第%d个元素的列下标:",i);
			scanf("%d",&s->data [i].j );
			printf("输入第%d个元素的元素值:",i);
			scanf("%d",&s->data [i].v);	
		}
	}
}

void sanyuan(link2 *s)
{
	int i;
	printf("稀疏矩阵三元组表的形式是:\n");
	for(i=1;i<=s->t;i++)
	{
		printf("%5d%5d%5d\n",s->data [i].i,s->data [i].j,s->data [i].v);
	}
	printf("稀疏矩阵共有%d行,%d列,%d个非零元素\n",s->m ,s->n,s->t );
	printf("\n");	
}

void xishu(link2 *s)
{
	int i,j,z,flag;
	printf("稀疏矩阵:\n");
	for(i=1;i<=s->m;i++)
	{
		for(j=1;j<=s->n;j++)
		{
			flag=0;
			for(z=1;z<=s->t;z++)
			{
				if(s->data[z].i==i&&s->data[z].j==j)
				{
					flag=1;
				break;//在一个位置只有一个数值,所以当这个数值匹配后,就结束,去找下一个位置的下一个数值
				}
			}
			if(flag==1)
				printf("%5d",s->data[z].v);
			else
				printf("%5d",0);
		}
		printf("\n");
	}
	printf("\n");
}

void yunxing(link2 *b,link2 *a)//三元矩阵的转换
{
	int p,q,col;//p为行,q为列,col为数值的个数
	b->m=a->n;
	b->n=a->m;
	b->t=a->t;
	if(a->t!=0)//在数值不为空的情况下
	{
		q=1;//开头的列数为1
		for(col=1;col<=a->n;col++)//b的行数
		{
			for(p=1;p<=a->t;p++)//有数值的那几个数
			{
				if(a->data[p].j==col)//找到行数为一的数据
				{
					b->data[q].j=a->data[p].i;
					b->data[q].i=a->data[p].j;
					b->data[q].v=a->data[p].v;
					q++;
				}
			}
		}

	}
}

main()
{
	link2 a,b;
	printf("请输入原矩阵:\n");
	shuru(&a);
	yunxing(&b,&a);
	printf("原");
	sanyuan(&a);
	printf("转置后");
	sanyuan(&b);
	printf("原");
	xishu(&a);
	printf("转置后");
	xishu(&b);
	

}

效果如下:
/*请输入原矩阵:
请输入非零元素行数:     2
请输入非零元素列数:     3
请输入非零元素的个数:   2
输入第1个元素的行下标:1
输入第1个元素的列下标:2
输入第1个元素的元素值:7
输入第2个元素的行下标:2
输入第2个元素的列下标:3
输入第2个元素的元素值:8
原稀疏矩阵三元组表的形式是:
    1    2    7
    2    3    8
稀疏矩阵共有2行,3列,2个非零元素

转置后稀疏矩阵三元组表的形式是:
    2    1    7
    3    2    8
稀疏矩阵共有3行,2列,2个非零元素

原稀疏矩阵:
    0    7    0
    0    0    8

转置后稀疏矩阵:
    0    0
    7    0
    0    8

Press any key to continue*/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值