数据结构实验--二维数组与矩阵压缩

  • 实验要求:

矩阵运算:根据两个4阶三角矩阵的压缩存储,计算两个矩阵相加之和,并将结果存入一个新的矩阵C中。

假设两种情况:两个(上)下三角矩阵求和

              一个上(下)三角和一个下(上)三角求和

如果是两个上(下)三角矩阵求和,依然使用压缩存储求和即可。

如果是一个上(下)三角矩阵和一个下(上)三角矩阵求和,可将两矩阵复原再求和

  • 实例:
  • 数据结构实验--二维数组与矩阵压缩_第1张图片

实验代码

#include
#include
#define M 4
#define N 4
/*
上三角矩阵;  
 
k=(n+(n-i+1))*i/2+(j-i); (i<=j)
k=n*(n+1)/2;         (i>j) 
*/
/*
下三角矩阵
k=i*(i+1)/2+j; (i>=j)
k=n*(n+1)/2;   (i=j)
			{
				z[i*(i+1)/2+j]=a[i][j];
			 } 
			else
			{
				z[M*(M+1)/2]=a[i][j];
			}
		}
	}
}
void yasuo_shang(int z[11],int a[4][4])  //压缩上三角矩阵 
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			if(i<=j)
			{
				z[(M+(M-i+1))*i/2+(j-i)]=a[i][j];
			 } 
			else
			{
				z[M*(M+1)/2]=a[i][j];
			}
		}
	}
}
void array1_add(int a[11],int b[11],int c[11])   //把数组a 数组b 相加后结果放入矩阵c中 
{
	for(int i=0;i<11;i++)
	{
	   c[i]=a[i]+b[i];
	}
}
void array2_add(int a[4][4],int b[4][4],int c[4][4]) //把矩阵a 矩阵b 相加后放入矩阵c中。 
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			c[i][j]=a[i][j]+b[i][j];
		}
	}
}
void print(int a[4][4])   //打印输出矩阵 
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
} 
void xia_huanyuan(int m[4][4],int n[11])  //把压缩矩阵还原为下三角矩阵
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			if(i>=j)
			{
				m[i][j]=n[i*(i+1)/2+j];
			}
			else
			{
				m[i][j]=n[M*(M+1)/2];
			}
		}
	}
 } 
void shang_huanyuan(int m[4][4],int n[11])  //把压缩矩阵还原为上三角矩阵
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			if(i<=j)
			{
				m[i][j]=n[(M+(M-i+1))*i/2+(j-i)];
			}
			else
			{
				m[i][j]=n[M*(M+1)/2];
			}
		}
	}
}

int main()
{
	int m[4][4];   //两个下三角矩阵的测试 
	input(m);
	printf("****************\n");
	int n[4][4];
	input(n);
	printf("****************\n");
	int p[11],q[11];
	yasuo_xia(p,m);
	yasuo_xia(q,n);
	int  k[11];
	array1_add(p,q,k);
	int l[4][4];
                xia_huanyuan(l,k); 
	print(l);
	printf("****************\n");
	printf("\n");
	printf("\n");
	printf("\n"); 
	int f[4][4],g[4][4],j[11],x[11]; //一个下三角与一个上三角的测试 
	input(f);
	printf("****************\n");
	input(g);
	printf("****************\n");
	yasuo_shang(j,f);
	yasuo_shang(x,g);
	int y[4][4],z[4][4],s[4][4];
	shang_huanyuan(y,j);
	shang_huanyuan(z,x);
	array2_add(y,z,s);
	print(s);
	printf("****************\n");
	return 0;
}

实验截图:

 

你可能感兴趣的:(数据结构实验--二维数组与矩阵压缩)