学习笔记------数据结构(C语言版)数组之行逻辑链接的顺序表

//RLSMatrix.cpp

#include"predefined.h"
#include"RLSMatrix.h"

Status MultSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q)
//算法5.3:求矩阵乘积Q=M*N,采用行逻辑链接存储表示
{
	int arow,tp,p,brow,t,q,ccol,i,ctemp[10];
	if(M.nu!=N.mu)
		return ERROR;
	(*Q).mu=M.mu;
	(*Q).nu=N.nu;
	(*Q).tu=0;
	if(M.tu*N.tu!=0)
	{
		for(arow=1;arow<=M.mu;arow++)
		{
			for(i=1;iMAXSIZE)
						return ERROR;
					(*Q).data[(*Q).tu].i=arow;
					(*Q).data[(*Q).tu].j=ccol;
					(*Q).data[(*Q).tu].e=ctemp[ccol];
				}
			}
		}
	}
	return OK;
}

Status CreateSMatrix(RLSMatrix *M)
//创建稀疏矩阵
{
	int i,m,n,row,t;
	int num[10];
	ElemType e;
	printf("请输入矩阵的行、列、非零元个数:");
	scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);
	for(i=1;i<=(*M).tu;i++)
	{
		printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:",i,(*M).mu,(*M).nu);
		scanf("%d,%d,%d",&m,&n,&e);
		(*M).data[i].i=m;
		(*M).data[i].j=n;
		(*M).data[i].e=e;
	}
	for(row=1;row<=(*M).mu;row++)
			num[row]=0;
	for(t=1;t<=(*M).tu;t++)
			++num[(*M).data[t].i];
	(*M).rpos[1]=1;
	for(row=2;row<=(*M).mu;row++)
			(*M).rpos[row]=num[row-1]+(*M).rpos[row-1];
	return OK;
}

void PrintSMatrix(RLSMatrix M)
//打印稀疏矩阵
{
	int i;
	printf("%d行%d列%d个非零元素。\n",M.mu,M.nu,M.tu);
	printf("行  列  元素值\n");
	for(i=1;i<=M.tu;i++)
		printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[i].e);
 }

//RLSMatrix.h

#define MAXSIZE 12500
#define MAXRC 20
typedef int ElemType;
typedef struct
{
	int i,j;
	ElemType e;
}Triple;
typedef struct
{
	Triple data[MAXSIZE+1];//date[0]未用
	int rpos[MAXRC+1];//各行第一个非零元的位置表
	int mu,nu,tu;
}RLSMatrix;

Status MultSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q);
Status CreateSMatrix(RLSMatrix *M);
void PrintSMatrix(RLSMatrix M);


你可能感兴趣的:(学习笔记---数据结构)