数据结构——稀疏矩阵运算器(C语言)

数据结构——稀疏矩阵运算器(C语言)

/*****************稀疏矩阵运算器 ****************/

#include
#include

#define OK    1
#define TRUE  1
#define ERROR 0
#define FALSE 0

#define MAX_SIZE 100
 

typedef struct{      //构造三元组 
	int x;
	int y; 
	int e;
}Triad;
typedef struct {
	int mrow,mcol,ms;
	Triad data[MAX_SIZE];
}Rtriad;

void Input(Rtriad &S){                                  //以三元组方式输入矩阵 
	printf("请输入行,列(row col):");
	scanf("%d%d",&S.mrow,&S.mcol);
	printf("请以行序为主序,以三元组的方式输入矩阵元素,'-1 -1 -1'表示结束:\n"); 
	int x,y,z;
	scanf("%d%d%d",&x,&y,&z);
	S.ms=0;
	while(!(x==-1&&y==-1&&z==-1)){                 //长度为S.ms+1,从0开始到S.ms 
		S.data[S.ms].x=x;
		S.data[S.ms].y=y;
		S.data[S.ms].e=z; 
		S.ms++;   
		scanf("%d%d%d",&x,&y,&z);
	}
	S.ms--;
}

void Add(Rtriad S1,Rtriad S2,Rtriad &S3){              //矩阵相加 
	if(S1.mcol!=S2.mcol||S1.mrow!=S2.mrow){
		printf("ERROR!!!\n");
		return ;
	}
	S3.mcol=S1.mcol ;
	S3.mrow=S1.mrow ;
	S3.ms=0;
	int row,col,s,x,y,z;
	for(row=1;row<=S3.mrow;row++){
		for(col=1;col<=S3.mcol;col++){
			z=0;
			for(s=0;s<=S1.ms;s++){
				if(S1.data[s].x==row&&S1.data[s].y==col){
					S3.data[S3.ms].x=row;
					S3.data[S3.ms].y=col;
					S3.data[S3.ms].e=S1.data[s].e;
				    z++;    
				}
			}
			for(s=0;s<=S2.ms;s++){
				if(S2.data[s].x==row&&S2.data[s].y==col){
					S3.data[S3.ms].x=row;
					S3.data[S3.ms].y=col;
					if(z==0)
					    S3.data[S3.ms].e=S2.data[s].e;
				    else
					    S3.data[S3.ms].e+=S2.data[s].e;
				    z++;				    
				}	
			}
			if(z!=0)
			    S3.ms++;
		}
	}
	
	int m=0;
	for(int t=0;t<=S3.ms;t++){
		if(S3.data[t].e==0){     //删除
		for(int i=t+1;i

你可能感兴趣的:(数据结构——稀疏矩阵运算器(C语言))