⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds3.053571.cpp

📁 本学期所有数据结构的大作业一
💻 CPP
字号:
#include<stdio.h>
#define MAXSIZE 100
#define MAXRC 100
typedef int ElemType;

typedef struct{
	int i,j;
	ElemType e;
}Triple;

typedef struct{
	Triple data[MAXSIZE+1];
	int rpos[MAXRC+1];
	int lpos[MAXRC+1];
	int mu,nu,tu;
	}RLSMatrix;

void CreateSMatrix(RLSMatrix &M)
{
	int col,t;
	int num[MAXSIZE+1];
	
	printf("输入该矩阵的行数、列数和非零元个数,以空格分隔:\n\n");
	scanf("%d %d %d",&M.mu,&M.nu,&M.tu);
	for(col=1;col<=M.nu;++col)  num[col]=0;
	for(t=1;t<=M.tu;++t)
	{
		printf("输入第%d个元素的行号i、列号j与值e:",t);
		scanf("%d %d %d",&M.data[t].i,&M.data[t].j,&M.data[t].e);
	}
	for(t=1;t<=M.tu;++t)
	{
		++num[M.data[t].j];
	}
	M.rpos[1]=1;
	for(col=2;col<=M.nu;++col)
		M.rpos[col]=M.rpos[col-1]+num[col-1];

    for(col=1;col<=M.mu;++col)  num[col]=0;
	for(t=1;t<=M.tu;++t)
	{
		++num[M.data[t].i];
	}
	M.lpos[1]=1;
	for(col=2;col<=M.mu;++col)
		M.lpos[col]=M.lpos[col-1]+num[col-1];
}

void DispMatrix(RLSMatrix &M)
{
	int p;
	if (M.tu<=0) 
		return;
	printf("\t%d\t%d\t%d\n",M.mu,M.nu,M.tu);
		printf("\t------------------\n");
	for (p=1;p<=M.tu;p++)
		printf("\t%d\t%d\t%d\n",M.data[p].i,M.data[p].j,M.data[p].e);
        printf("\n");

}

void TransposeSMatrix()
{
	RLSMatrix M,T;
	int col,p,q;
	printf("\n");
	printf("首先实现矩阵的转置\n");printf("\n");
    printf("//创建需被转置的矩阵M://\n");
	CreateSMatrix(M);
	printf("M的三元组:\n");
	DispMatrix(M);	
	T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
	for(p=1;p<=M.tu;++p)
	{
		col=M.data[p].j;q=M.rpos[col];
		T.data[q].i=M.data[p].j;
		T.data[q].j=M.data[p].i;
		T.data[q].e=M.data[p].e;
		++M.rpos[col];
	}
  	printf("M转置为T\n");
    DispMatrix(T);
}
void AddSMatrix()
{
	RLSMatrix M,N,P;
	int p=1,q=1,k=1;
	ElemType v;
	printf("\n");
	printf("实现矩阵的加法M+N\n");printf("\n");
    printf("//创建矩阵M://\n");
	CreateSMatrix(M);
    printf("//创建矩阵N://\n");
	CreateSMatrix(N);
	if (M.mu!=N.mu || M.nu!=N.nu)
	printf("ERROR!");			
	P.mu=M.mu;P.nu=M.nu; 
{
	while (p<=M.tu && q<=N.tu) 
	{	
		if (M.data[p].i==N.data[q].i)
		{	
			if(M.data[p].j<N.data[q].j) 
			{	
				P.data[k].i=M.data[p].i;
				P.data[k].j=M.data[p].j;
				P.data[k].e=M.data[p].e;
				k++;p++;
           	}
           	else if (M.data[p].j>N.data[q].j)
			{	
				P.data[k].i=N.data[q].i;
               	P.data[k].j=N.data[q].j;
               	P.data[k].e=N.data[q].e;
               	k++;q++;
           	}
           	else
			{ 	
				v=M.data[p].e+N.data[q].e;
				if (v!=0)
				{	
					P.data[k].i=M.data[p].i;
					P.data[k].j=M.data[p].j;
					P.data[k].e=v;
					k++;
				}
				p++;q++;
			}
          	 
		}
     	else if (M.data[p].i<N.data[q].i) 
		{	
			P.data[k].i=M.data[p].i;	 
			P.data[k].j=M.data[p].j;
			P.data[k].e=M.data[p].e;
			k++;p++;
		}
    	else							
		{	
			P.data[k].i=N.data[q].i;	 
			P.data[k].j=N.data[q].j;
			P.data[k].e=N.data[q].e;
			k++;q++;
     	}
	
	}
    if(p<=M.tu)
		for(p;p<=M.tu;p++)
		{	
			P.data[k].i=M.data[p].i;	  
			P.data[k].j=M.data[p].j;
			P.data[k].e=M.data[p].e;
			k++;
		}
	else if(q<=N.tu)
		for(q;q<=N.tu;q++)
		{	
			P.data[k].i=N.data[q].i;	
			P.data[k].j=N.data[q].j;
			P.data[k].e=N.data[q].e;
			k++;
     	}
	}
		P.tu=k-1;
    printf("M的三元组:\n");
	DispMatrix(M);	
    printf("N的三元组:\n");
	DispMatrix(N);	
	printf("M与N矩阵之和:\n");
	DispMatrix(P);
}

void MultSMatrix()
{
	
	RLSMatrix M,N,Q;
	int arow,brow,p,tp,ccol,t,q;
	ElemType ctemp[10];
	for(t=0;t<=10;t++)ctemp[t]=0;
	printf("\n");
	printf("实现矩阵的乘法M*N\n");printf("\n");
    printf("//创建矩阵M://\n");
	CreateSMatrix(M);
    printf("//创建矩阵N://\n");
	CreateSMatrix(N);
	if(M.nu!=N.mu)printf("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)
		{
			
			Q.lpos[arow]=Q.tu+1;
			if(arow<M.mu)tp=M.lpos[arow+1];
			else{tp=M.tu+1;}
			for(p=M.lpos[arow];p<tp;++p)
			{
				brow=M.data[p].j;
				if(brow<N.mu) t=N.lpos[brow+1];
				else {t=N.tu+1;}
				for(q=N.lpos[brow];q<t;++q)
				{
					ccol=N.data[q].j;
					ctemp[ccol]+=M.data[p].e*N.data[q].e;
				}
			}
			
			for(ccol=1;ccol<=Q.nu;++ccol)
				if(ctemp[ccol])
				{
					if(++Q.tu>MAXSIZE) printf("ERROR!");
				    	Q.data[Q.tu].i=arow;	 
		            	Q.data[Q.tu].j=ccol;
		            	Q.data[Q.tu].e=ctemp[ccol];
					
				}
		    for(ccol=1;ccol<=Q.nu;++ccol)
				ctemp[ccol]=0;
		}
	}
    printf("M的三元组:\n");
	DispMatrix(M);	
    printf("N的三元组:\n");
	DispMatrix(N);	
	printf("M与N矩阵之积:\n");
    DispMatrix(Q);
}

void main()
{
	TransposeSMatrix();
 	AddSMatrix();
	MultSMatrix();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -