4 -1 设有一个二维数组 A [ m ][ n ] ,假设 A [0][0] 存放位置在 644 (10) , A [2][2] 存放位置在 676 (10) ,每个元素占一个空间,问 A [3][3] (10) 存放在什么位置?脚注 (10) 表示用 10 进制表示。
【解答】
4 - 2 设有一个 n ′ n 的对称矩阵 A ,如图 (a) 所示。为了节约存储,可以只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。前者称为上三角矩阵,后者称为下三角矩阵。我们把它们按行存放于一个一维数组 B 中,如图 (b) 和图 (c) 所示。并称之为对称矩阵 A 的压缩存储方式。试问:
(1) 存放对称矩阵 A 上三角部分或下三角部分的一维数组 B 有多少元素?
(2) 若在一维数组 B 中从 0 号位置开始存放,则如图 (a) 所示的对称矩阵中的任一元素 a ij 在只存上三角部分的情形下 ( 图 (b)) 应存于一维数组的什么下标位置?给出计算公式。
(3) 若在一维数组 B 中从 0 号位置开始存放,则如图 (a) 所示的对称矩阵中的任一元素 a ij 在只存下三角部分的情形下 ( 图 (c)) 应存于一维数组的什么下标位置?给出计算公式。
【 解答 】
4 -3 设 A 和 B 均为下三角矩阵,每一个都有 n 行。因此在下三角区域中各有 n ( n +1)/2 个元素。另设有一个二维数组 C ,它有 n 行 n +1 列。试设计一个方案,将两个矩阵 A 和 B 中的下三角区域元素存放于同一个 C 中。要求将 A 的下三角区域中的元素存放于 C 的下三角区域中, B 的下三角区域中的元素转置后存放于 C 的上三角区域中。并给出计算 A 的矩阵元素 a ij 和 B 的矩阵元素 b ij 在 C 中的存放位置下标的公式。
【 解答 】
作业答案:
4-4 针对稀疏矩阵的三元组表示方法,写出两个矩阵的求和算法。即若 A, B, C 为三个矩阵,求 C = A + B.(C 仍为三元组 )
三元组顺序表
三元组顺序表的 C 表示如下:
#define MAXSIZE 12500
typedef struct
{
int i, j; // 非零元的行列下标
ElemType e;
}Triple;
typedef union
{
Triple a_Data[MAXSIZE + 1]; // 三元组表, a_Data[0] 未用
int mu, nu, tu;
}TSMatrix;
4 -5 画出下列广义表的图形表示和它们的存储表示:
(1) D(A(c), B(e), C(a, L(b, c, d)))
(2) J1(J2(J1, a, J3(J1)), J3(J1))
【解答】
4 -6 利用广义表的 head 和 tail 操作写出函数表达式,把以下各题中的单元素 banana 从广义表中分离出来:
(1) L1(apple, pear, banana, orange)
(2) L2((apple, pear), (banana, orange))
(3) L3(((apple), (pear), (banana), (orange)))
(4) L4((((apple))), ((pear)), (banana), orange)
(5) L5((((apple), pear), banana), orange)
(6) L6(apple, (pear, (banana), orange))
【解答】
答案
>>返回 |