0
点赞
收藏
分享

微信扫一扫

C 稀疏矩阵 实现文件

胡桑_b06e 2022-04-24 阅读 79

 测试输入:
5 5 6 //输入矩阵A的总行数、总列数及非零元个数
0 2 -9 0 4 5 1 0 -7 1 2 7 3 1 8 4 2 9 //按行序输入矩阵A的各个非零元素的行号、列号及值

预期输出:
The Matrix A:
(0,2,-9)
(0,4,5)
(1,0,-7)
(1,2,7)
(3,1,8)
(4,2,9)
The Transport Matrix of A:
(0,1,-7)
(1,3,8)
(2,0,-9)
(2,1,7)
(2,4,9)
(4,0,5) //末尾换行

#include<stdio.h>
#include<string.h>
#define OK 1
#define Maxsize 10   //用户自定义三元组最大长度
typedef struct     //定义三元组表
{
	int i,j;
	int v;
 }SPNode;
 typedef struct  //定义三元组表
 {
 	SPNode data[Maxsize];
 	int m,n,t;  //矩阵行,列及三元组表长度 
  }SPMatrix;
  void InitSPNode(SPMatrix *a)  //输入三元组表
  
  {
  	int i,j,k,val,maxrow,maxcol;
	 maxrow=0;
	 maxcol=0;
	 i=j=0;
	 k=0;
	 while(i!=-1&&j!=-1)     //两个其中一个等于-1结束输入
	 {
	 	printf("输入(行 列 值):");
		scanf("%d %d %d",&i,&j,&val);
		a->data[k].i=i;
		a->data[k].j=j;
		a->data[k].v=val;
		if(maxrow<i)maxrow=i;
	    if(maxcol<j)maxcol=j;
	    k++;
	  } 
	  a->m=maxrow;a->n=maxcol;a->t=k-1;
   } 
   void showMatrix(SPMatrix *a)   //输出稀疏矩阵 
   {
   	int p,q;
   	int t=0;
   	for(p=0;p<=a->m;p++)
   	{for(q=0;q<=a->n;q++)
   	  { if(a->data[t].i==p&&a->data[t].j==q)
   	    { printf("%d ",a->data[t].v);
   	       t++;
		} 
		else printf("0 ");
	  }
	  printf("\n");
	}
  }
  void TransposeSMatrix(SPMatrix *a,SPMatrix *b)   //稀疏矩阵转置
  {
  	int q,col,p;
	  b->m=a->n;b->n=a->m; b->t=a->t;
	  if(b->t)
	  {
	  	q=0;
	  	for(col=0;col<=a->n;++col)   //按a的列序转置
		  for(p=0;p<a->t;++p)      //扫描整个三元组表
		   if(a->data[p].j==col)
		   {
		   	  b->data[q].i=a->data[p].j;
		   	  b->data[q].j=a->data[p].i;
		   	  b->data[q].v=a->data[p].v;
		   	  ++q;
			} 
	  }
   } 
   void main(void)
   {
   	SPMatrix a,b;
   	printf("\n  结束请输入(-1,-1,-1)\n");
   	InitSPNode(&a);
   	printf("输入矩阵为:\n");
   	showMatrix(&a);    //转置前
	TransposeSMatrix(&a,&b);
	printf("输出矩阵为:\n");
	showMatrix(&b);    //转置后 
   } 
/*************************************************************
    稀疏矩阵  实现文件
    更新于2020年10月28日
**************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SparseMatrix.h"

void input(SPMatrix &a)//输入采用三元组顺序表存储的矩阵
{
	int p;
	scanf("%d%d%d",&a.m,&a.n,&a.t); //输入矩阵总行数、总列数和非零元素的个数
	for(p=0;p<a.t;p++)
		scanf("%d%d%d",&a.data[p].i,&a.data[p].j,&a.data[p].v);
}
void output(SPMatrix a)//输出矩阵的三元组表
{
	int p;
	for(p=0;p<a.t;p++)
		printf("(%d,%d,%d)\n",a.data[p].i,a.data[p].j,a.data[p].v);
}
void TransSMatrix(SPMatrix a, SPMatrix &b)//一般转置,即:按列序转置
{
	// 请在这里补充代码,完成本关任务
    /********** Begin *********/
	
    /********** End **********/
}
举报

相关推荐

0 条评论