第五章数组与广义表
5.1 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A 的起始存储位置(基地址)为1000,计算:
(1)数组A的体积(即存储量);
(2)数组A的最后一个元素a57的第一个字节的地址;
(3)按行存储时,元素a14的第一个字节的地址;
(4)按列存储时,元素a47的第一个字节的地址。
5.2 若矩阵A m×n中的某个元素a i×j是第I行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。
假设以二维数组存储矩阵A m×n,试编写求出矩阵中所有马鞍点的算法,并分析你的算法在最坏情况下的时间复杂度。
5.3 现有如下的稀疏矩阵A如图所示,要求画出以下各种表示法。
(1)三元组表示法;
(2)伪地址表示法;
(3)带行指针向量的单链表示法;
(4)十字链表法。
5.4 求下列广义表操作的结果:
⑴GetHead【(p,h,w)】
⑵GetTAil【(b,k,p,h)】
⑶GetHead【((a,b),(c,d))】
⑷GetTail【((a,b),(c,d))】
⑸GetHead【GetTail【((a,b),(c,d))】】
⑹GetTail【GetHead【((a,b),(c,d))】】
⑺GetHead【GetTail【GetHead【((a,b),(c,d))】】】
⑻GetTail【GetHead 【GetTail 【((a,b),(c,d))】】】
注意:【】是函数的符号。
5.5 利用广义表的GetHead和GetTail操作写出如上题的函数表达式,把原子banana分别从下列广义表中分离出来。
⑴L1=(apple,pear,banana,orange);
⑵L2=((apple,pear),(banana,orange));
5.6 下述广义表的长度和深度各是多少?
⑴L1=((a),((b),c),(((d))));
⑵L2=(a,(a,b),d,e,((i,j),k));。