解析博客:
矩阵存储和特殊矩阵的压缩存储_n阶对称矩阵压缩-CSDN博客
函数功能:
//为N阶下三角矩阵初始化成的一维数组分配空间
void Init_triangular_matrix(int *&matrix);
//返回二维下三角矩阵的值(压缩存取)
int get_Value_triangular_matrix(int matrix[],int x,int y);
//把值传进二维下三角矩阵矩阵(压缩存储)
void Assign_triangular_matrix(int matrix[],int input_value,int x,int y);
//输出展示压缩存储的下三角矩阵矩阵
void Display_triangular_matrix(int matrix[]);
//销毁下三角矩阵存储空间
void Destroy_triangular_matrix(int matrix[]);
函数实现:
#define max_wide 4
/**************************************************
函数名: Init_triangular_matrix
功 能: 初始化下三角矩阵,为其分配存储空间
参 数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_triangular_matrix(int *&matrix)
{//给地址分配空间matrix = (int*)malloc(sizeof(int)*(max_wide*(max_wide+1)/2));
}
/**************************************************
函数名: get_Value_triangular_matrix
功 能: 得到下三角矩阵的值(因为是压缩存储,所以需要转换)
参 数: (1)int matrix[]:下三角矩阵矩阵存储数据的一维数组(2)int x:对应的横坐标(3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_triangular_matrix(int matrix[],int x,int y)
{if(x >= y){return matrix[x*(x+1)/2+y];}else //上三角,则直接返回末尾{return matrix[max_wide*(max_wide+1)/2];}
}
/**************************************************
函数名: Assign_triangular_matrix
功 能: 给压缩下三角矩阵赋值(和取值一样,也是通过一维数组转换)
参 数: (1)int matrix[]:要赋值的下三角压缩矩阵(2)int input_value:要赋的值(3)int x:对应的横坐标(4)int y:对应的纵坐标
注 意: 上三角, 相当于整体赋值一个数,下三角则正常赋值
返回值: 无
**************************************************/
void Assign_triangular_matrix(int matrix[],int input_value,int x,int y)
{if(x >= y){matrix[x*(x+1)/2+y] = input_value;}else //上三角整体赋值{matrix[max_wide*(max_wide+1)/2] = input_value;}return;
}
/**************************************************
函数名: Display_triangular_matrix
功 能: 输出展示下三角矩阵(调用取值函数)
参 数: int matrix[]:要展示的下三角矩阵
返回值: 无
**************************************************/
void Display_triangular_matrix(int matrix[])
{int i,j;for(i = 0; i<max_wide; i++){for(j = 0; j<max_wide; j++){printf("%5d",get_Value_triangular_matrix(matrix,i,j));}printf("\n\n");}
}
/**************************************************
函数名: Destroy_triangular_matrix
功 能: 销毁下三角矩阵的空间
参 数: int matrix[]:要销毁的压缩下三角矩阵
返回值: 无
**************************************************/
void Destroy_triangular_matrix(int matrix[])
{free(matrix);
}
main函数调用
int main()
{int *matrix_test1;int line,row;//行,列int input_value;Init_triangular_matrix(matrix_test1);printf("\n请输入对称矩阵上三角常量:\n");scanf("%d",&input_value);matrix_test1[max_wide*(max_wide+1)/2] = input_value;printf("\n下面请输入对称矩阵下三角部分即可:\n");for(line = 0; line < max_wide; line++){printf("\n请输入第%d行的%d个数据元素:\n",line+1,line+1);for(row = 0; row <= line; row++){scanf("%d",&input_value);Assign_triangular_matrix(matrix_test1,input_value,line,row);}}Display_triangular_matrix(matrix_test1);Destroy_triangular_matrix(matrix_test1);return 0;
}
下三角矩阵完整代码:
#include <stdio.h>
#include <malloc.h>
#define max_wide 4//为N阶下三角矩阵初始化成的一维数组分配空间
void Init_triangular_matrix(int *&matrix);
//返回二维下三角矩阵的值(压缩存取)
int get_Value_triangular_matrix(int matrix[],int x,int y);
//把值传进二维下三角矩阵矩阵(压缩存储)
void Assign_triangular_matrix(int matrix[],int input_value,int x,int y);
//输出展示压缩存储的下三角矩阵矩阵
void Display_triangular_matrix(int matrix[]);
//销毁下三角矩阵存储空间
void Destroy_triangular_matrix(int matrix[]);/**************************************************
函数名: Init_triangular_matrix
功 能: 初始化下三角矩阵,为其分配存储空间
参 数: int *&matrix:给对应矩阵分配空间
返回值: 无
**************************************************/
void Init_triangular_matrix(int *&matrix)
{//给地址分配空间matrix = (int*)malloc(sizeof(int)*(max_wide*(max_wide+1)/2));
}
/**************************************************
函数名: get_Value_triangular_matrix
功 能: 得到下三角矩阵的值(因为是压缩存储,所以需要转换)
参 数: (1)int matrix[]:下三角矩阵矩阵存储数据的一维数组(2)int x:对应的横坐标(3)int y:纵坐标
返回值: int:对应坐标的值
**************************************************/
int get_Value_triangular_matrix(int matrix[],int x,int y)
{if(x >= y){return matrix[x*(x+1)/2+y];}else //上三角,则直接返回末尾{return matrix[max_wide*(max_wide+1)/2];}
}
/**************************************************
函数名: Assign_triangular_matrix
功 能: 给压缩下三角矩阵赋值(和取值一样,也是通过一维数组转换)
参 数: (1)int matrix[]:要赋值的下三角压缩矩阵(2)int input_value:要赋的值(3)int x:对应的横坐标(4)int y:对应的纵坐标
注 意: 上三角, 相当于整体赋值一个数,下三角则正常赋值
返回值: 无
**************************************************/
void Assign_triangular_matrix(int matrix[],int input_value,int x,int y)
{if(x >= y){matrix[x*(x+1)/2+y] = input_value;}else //上三角整体赋值{matrix[max_wide*(max_wide+1)/2] = input_value;}return;
}
/**************************************************
函数名: Display_triangular_matrix
功 能: 输出展示下三角矩阵(调用取值函数)
参 数: int matrix[]:要展示的下三角矩阵
返回值: 无
**************************************************/
void Display_triangular_matrix(int matrix[])
{int i,j;for(i = 0; i<max_wide; i++){for(j = 0; j<max_wide; j++){printf("%5d",get_Value_triangular_matrix(matrix,i,j));}printf("\n\n");}
}
/**************************************************
函数名: Destroy_triangular_matrix
功 能: 销毁下三角矩阵的空间
参 数: int matrix[]:要销毁的压缩下三角矩阵
返回值: 无
**************************************************/
void Destroy_triangular_matrix(int matrix[])
{free(matrix);
}int main()
{int *matrix_test1;int line,row;//行,列int input_value;Init_triangular_matrix(matrix_test1);printf("\n请输入对称矩阵上三角常量:\n");scanf("%d",&input_value);matrix_test1[max_wide*(max_wide+1)/2] = input_value;printf("\n下面请输入对称矩阵下三角部分即可:\n");for(line = 0; line < max_wide; line++){printf("\n请输入第%d行的%d个数据元素:\n",line+1,line+1);for(row = 0; row <= line; row++){scanf("%d",&input_value);Assign_triangular_matrix(matrix_test1,input_value,line,row);}}Display_triangular_matrix(matrix_test1);Destroy_triangular_matrix(matrix_test1);return 0;
}