给出对称矩阵、三角矩阵的节省内存的存贮结构并写出相应的输入、输出算法。
对称矩阵和三角矩阵可以通过特殊的存储结构来节省内存。这种存储结构只存储矩阵的一部分元素,而不是全部元素。
对称矩阵:对于一个n阶对称矩阵,我们只需要存储主对角线及其上方或下方的元素。这可以通过一个一维数组来实现,数组的长度为n*(n+1)/2。对于矩阵中的元素a[i][j],如果i<=j,则其在数组中的位置为i*(i+1)/2+j。
#include <stdio.h>
#define MAX_ROW_INDEX 100
#define MAX_COL_INDEX 100
#define MAX_INDEX 100
typedef int Elemtype;
// 在存储对称矩阵的一维数组A中取对称矩阵的第i行第j列元素给elem
int getValueSymmetricMatrix(int A[], Elemtype *elem, int i, int j) {
// 检查索引是否有效
if(i < 1 || i > MAX_ROW_INDEX || j < 1 || j > MAX_COL_INDEX)
return 0;
int k;
// 计算元素在数组中的位置
if (i >= j)
k = i * (i - 1) / 2 + j - 1;
else
k = j * (j - 1) / 2 + i - 1;
// 获取元素的值
*elem = A[k];
return 1;
}
三角矩阵:对于一个n阶上三角矩阵,我们只需要存储主对角线及其上方的元素。这也可以通过一个一维数组来实现,数组的长度为n*(n+1)/2。对于矩阵中的元素a[i][j],如果i<=j,则其在数组中的位置为i*(i+1)/2+j。
#include <stdio.h>
#define MAX_ROW_INDEX 100
#define MAX_COL_INDEX 100
#define MAX_INDEX 100
typedef int Elemtype;
// 在存储下三角矩阵的一维数组A中取下三角矩阵的第i行第j列元素给elem
int getValueLowerTriangularMatrix(int A[], Elemtype *elem, int i, int j) {
// 检查索引是否有效
if(i < 1 || i > MAX_ROW_INDEX || j < 1 || j > MAX_COL_INDEX)
return 0;
int n = MAX_INDEX;
int k;
// 计算元素在数组中的位置
if (i >= j)
k = i * (i - 1) / 2 + j - 1;
else
k = n * (n + 1) / 2;
// 获取元素的值
*elem = A[k];
return 1;
}