对称矩阵压缩算法的实现

3.3.1 对对称矩阵进行压缩存储代码

int CompMatrix(Array &s)//对对称矩阵进行压缩存储 {

int i,j,k=0;

for(i=1;i<=n;i++) for(j=1;j<=i;j++) {

s.m[k]=s.M[i][j]; k++; }

printf(\压缩后的矩阵存入一维数组后各元素为:\\n\ printf(\

for(k=0;k

3.4 将存储后的矩阵按照数学形式输出

矩阵的数学形式即为一个二维数组,我们将矩阵进行压缩存储后,其原来的形式被改变,变为一维数组,而所存储的元素个数也少于原矩阵,因此需要编辑函数将矩阵按数学形式输出。

OutputMatrix()函数:此函数的功能是:将压缩后的矩阵按照矩阵的数学形式输出,通过公式:当i>=j时,k=i*(i-1)/2+j-1;当i

赋值流程图如图3.7所示,输出流程图如图3.8所示。

8

开始 开始 i=1 初始化i=1 N N 判断i值与 i<=n 判断i值与 i<=n 行下标n值 i=1 初始化i=1 行下标n值的 Y 关系 初始化j=1 j=1 N 判断列下 j<=i 标j值 j<=n 与行下标 值得大小 结束 图3.7 赋值流程图

的关系 Y 初始化 判断列下标j 与n值的 大小关系 Y 输出矩阵 i++ 结束 图3.8 输出流程图 9

j=1 j=1

Y i

k=i*(i-1)/2+j-1

k=j*(j-1)/2+i-1 j++

s.M[i][j]=s.m[k]

i++

j++

3.4.1 将存储后的矩阵按照数学形式输出的代码

int OutputMatrix(Array s)//按照数学形式输出矩阵 {

int i,j,k=0;

for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i>=j) {

k=i*(i-1)/2+j-1; s.M[i][j]=s.m[k]; } else {

k=j*(j-1)/2+i-1; s.M[i][j]=s.m[k]; }

printf(\您压缩存储的矩阵按照数学形式输出为:\\n\ printf(\ for(i=1;i<=n;i++) {

for(j=1;j<=n;j++)

printf(\ printf(\ }

return ok; }

10

4 详细代码

#include #include #include #define OVERFLOW -2 #define UNDERFLOW -1 #define ok 1

typedef struct {

int M[100][100]; int m[100]; }Array;

Array s; int n;

int CreatMatrix(Array &s)//构建任意矩阵 {

int i,j;

//printf(\请输入数组中各元素,输入时请注意:s.M[i][j]=s.M[j][i]\\n\ printf(\请输入您需要构建n阶矩阵中的n值\\n\ scanf(\ if(n<=0) {

fflush(stdin);

printf(\值为非法输入,请您重新输入n值,n>0\\n\ scanf(\ }

fflush(stdin);

printf(\请输入数组中各元素,输入时请注意:s.M[i][j]=s.M[j][i]\\n\ for(i=1;i<=n;i++) {

for(j=1;j<=n;j++)

scanf(\ }

printf(\您构建的矩阵为:\\n\ printf(\

11

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4