给出对称矩阵、三角矩阵的节省内存的存贮结构并写出相应的输入、输出算法。
对称矩阵和三角矩阵可以通过特殊的存储结构来节省内存。这种存储结构只存储矩阵的一部分元素,而不是全部元素。
对称矩阵:对于一个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 100typedef 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 100typedef 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;
}