清华大学出版社数据结构(C++版)(第2版)课后习题答案最全整理 下载本文

【解答】对应的三元组顺序表如图4-5所示,十字链表如图4-6所示。

面 6 共 10

5.已知A为稀疏矩阵,试从空间和时间角度比较采用二维数组和三元组顺序表两种不同的存储结构完成求 运算的优缺点。

【解答】设稀疏矩阵为m行n列,如果采用二维数组存储,其空间复杂度为O(m×n);因为要将所有的矩阵元素累加起来,所以,需要用一个两层的嵌套循环,其时间复杂度亦为O(m×n)。如果采用三元组顺序表进行压缩存储,假设矩阵中有t个非零元素,其空间复杂度为O(t),将所有的矩阵元素累加起来只需将三元组顺序表扫描一遍,其时间复杂度亦为O(t)。当t << m×n时,采用三元组顺序表存储可获得较好的时、空性能。

6.设某单位职工工资表ST由“工资”、“扣除”和“实发金额”三项组成,其中工资项包括“基本工资”、“津贴”和“奖金”,扣除项包括“水”、“电”和“煤气” 。

⑴ 请用广义表形式表示所描述的工资表ST,并用表头和表尾求表中的“奖金”项;

⑵ 画出该工资表ST的存储结构。

【解答】⑴ ST=((基本工资,津贴,奖金),(水,电,煤气),实发金额) Head(Tail(Tail(Head(ST))))=奖金

⑵ 工资表ST的头尾表示法如图4-7所示。

7.若在矩阵A中存在一个元素ai,j(0≤i≤n-1,0≤j≤m-1),该元素是第i行元素中最小值且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。假设以二维数组存储矩阵A,试设计一个求该矩阵所有马鞍点的算法,并分析最坏情况下的时间复杂度。

【解答】在矩阵中逐行寻找该行中的最小值,然后对其所在的列寻找最大值,如果该列上的最大值与该行上的最小值相等,则说明该元素是鞍点,将它所在行号和列号输出。

具体算法如下:

分析算法,外层for循环共执行n次,内层第一个for循环执行m次,第二个for循环最坏情况下执行n次,所以,最坏情况下的时间复杂度为O(mn+n2)。

学习自测及答案

1.二维数组M中每个元素的长度是3个字节,行下标从0到7,列下标从0到9,从首地址d开始存储。若按行优先方式存储,元素M[7][5]的起始地址为( ),若按列优先方式存储,元素M[7][5]的起始地址为( )。 【解答】d+22,d+141

2.一个n×n的对称矩阵,按行优先或列优先进行压缩存储,则其存储容量为( )。 【解答】n(n+1)/2

3.设n行n列的下三角矩阵A(行列下标均从1开始)已压缩到一维数组S[1]~S[n(n+1)/2]中,若按行优先存储,则A[i][j]在数组S中的存储位置是( )。 【解答】i×(i-1)/2+j

4.已知广义表LS=(a, (b, c), (d, e, a)),运用Head函数和Tail函数取出LS中原子d的运算是( )。 【解答】Head(Head(Tail(Tail(LS))))

5.广义表(a, b, (c, (d)))的表尾是( )。 A (d) B (c,(d)) C b,(c,(d)) D (b,(c,(d))) 【解答】D

6.设有三对角矩阵An×n(行、列下标均从0开始),将其三条对角线上的元素逐行存于数组B[3n-2]中,使得B[k]=aij求: ⑴ 用i, j表示k的下标变换公式; ⑵ 用k表示i, j的下标变换公式。

【解答】⑴ 要求i, j表示k的下标变换公式,就是要求在k之前已经存储了多少个非零元素,这些非零元素的个数就是k的值。元素aij求所在的行为i,列为j,则在其前面的非零元素的个数是;k=2 + 3(i-1)+( j-i + 1)= 2i+ j。 ⑵ 因为k和i, j之间是一一对应的关系,k+1是当前非零元素的个数,整除即为其所在行号,取余表示当前行中第几个非零元素,加上前面零元素所在列数就是当前列号,即:

7.已知两个n×n的对称矩阵按压缩存储方法存储在已维数组A和B中,编写算法计算对称矩阵的乘积。

【解答】对称矩阵采用压缩存储,乘积矩阵也采用压缩存储。注意矩阵元素的表示方法。

第 5 章 树和二叉树 课后习题讲解

1. 填空题

⑴ 树是n(n≥0)结点的有限集合,在一棵非空树中,有( )个根结点,其余

的结点分成m(m>0)个( )的集合,每个集合都是根结点的子树。 【解答】有且仅有一个,互不相交

⑵ 树中某结点的子树的个数称为该结点的( ),子树的根结点称为该结点的( ),该结点称为其子树根结点的( )。 【解答】度,孩子,双亲

⑶ 一棵二叉树的第i(i≥1)层最多有( )个结点;一棵有n(n>0)个结点的满二叉树共有( )个叶子结点和( )个非终端结点。 【解答】2i-1,(n+1)/2,(n-1)/2

【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。

⑷ 设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是( ),最小值是( )。 【解答】2h -1,2h-1

【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。

⑸ 深度为k的二叉树中,所含叶子的个数最多为( )。