⑷ 稀疏矩阵一般压缩存储方法有两种,分别是( )和( )。
【解答】三元组顺序表,十字链表
⑸ 广义表((a), (((b),c)),(d))的长度是( ),深度是( ),表头是( ),表尾是( )。 【解答】3,4,(a),((((b),c)),(d))
⑹ 已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是( )。 【解答】Head(Head(Tail(LS)))
2. 选择题
⑴ 二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要( )个字节,A的第8列和第5行共占( )个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的( )元素的起始地址一致。
A 90 B 180 C 240 D 540 E 108 F 114 G 54
H A[8][5] I A[3][10] J A[5][8] K A[4][9] 【解答】D,E,K
【分析】数组A为9行10列,共有90个元素,所以,存放A至少需要90×6=540个存储单元,第8列和第5行共有18个元素(注意行列有一个交叉元素),所以,共占108个字节,元素A[8][5]按行优先存储的起始地址为d+8×10+5=d+85,设元素A[i][j]按列优先存储的起始地址与之相同,则d+j×9+i=d+85,解此方程,得i=4,j=9。
⑵ 将数组称为随机存取结构是因为( )
A 数组元素是随机的 B 对数组任一元素的存取时间是相等的 C 随时可以对数组进行访问 D 数组的存储结构是不定 【解答】B
⑶ 下面的说法中,不正确的是( )
A 数组是一种线性结构 B 数组是一种定长的线性结构
C 除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等 D 数组的基本操作有存取、修改、检索和排序等,没有插入与删除操
【解答】C
【分析】数组属于广义线性表,数组被创建以后,其维数和每维中的元素个数是确定的,所以,数组通常没有插入和删除操作。
⑷ 对特殊矩阵采用压缩存储的目的主要是为了( ) A 表达变得简单 B 对矩阵元素的存取变得简单
C 去掉矩阵中的多余元素 D 减少不必要的存储空间
【解答】D
【分析】在特殊矩阵中,有很多值相同的元素并且他们的分布有规律,没有必要为值相同的元素重复存储。
⑸ 下面( )不属于特殊矩阵。
A 对角矩阵 B 三角矩阵 C 稀疏矩阵 D 对称矩阵
【解答】C
⑹ 若广义表A满足Head(A)=Tail(A),则A为( ) A ( ) B (( )) C (( ),( )) D(( ),( ),( )) 【解答】B
⑺ 下面的说法中,不正确的是( )
A 广义表是一种多层次的结构 B 广义表是一种非线性结构 C 广义表是一种共享结构 D 广义表是一种递归
【解答】B
【分析】从各层元素各自具有的线性关系讲,广义表属于线性结构。
⑻ 下面的说法中,不正确的是( )
A 对称矩阵只须存放包括主对角线元素在内的下(或上)三角的元素即可。 B 对角矩阵只须存放非零元素即可。
C 稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储。
D 稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储 【解答】D
【分析】稀疏矩阵中大量值为零的元素分布没有规律,因此采用三元组表存储。如果零元素的分布有规律,就没有必要存储非零元素的行号和列号,而需要按其压缩规律找出相应的映象函数。
3. 判断题
⑴ 数组是一种复杂的数据结构,数组元素之间的关系既不是线性的,也不是树形的。 【解答】错。例如二维数组可以看成是数据元素为线性表的线性表。
⑵ 使用三元组表存储稀疏矩阵的元素,有时并不能节省存储空间。
【解答】对。因为三元组表除了存储非零元素值外,还需要存储其行号和列号。
⑶ 稀疏矩阵压缩存储后,必会失去随机存取功能。
【解答】对。因为压缩存储后,非零元素的存储位置和行号、列号之间失去了确定的关系。 ⑷ 线性表可以看成是广义表的特例,如果广义表中的每个元素都是单元素,则广义表便成为线性表。 【解答】对。
⑸ 若一个广义表的表头为空表,则此广义表亦为空表。
【解答】错。如广义表L=(( ),(a,b))的表头为空表,但L不是空表。
4.一个稀疏矩阵如图4-4所示,写出对应的三元组顺序表和十字链 表存储表示。
【解答】对应的三元组顺序表如图4-5所示,十字链表如图4-6所示。
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)。
8.已知两个n×n的对称矩阵按压缩存储方法存储在已维数组A和B中,编写算法计算对称矩阵的乘积。
【解答】对称矩阵采用压缩存储,乘积矩阵也采用压缩存储。注意矩阵元素的表示方法。
三、学习自测题 《指导》P64-65。 相关程序:
字符串模式匹配BF算法(P82);KMP算法(P85);奇数阶幻方算法(P93-94)。
稀疏矩阵压缩存储(三元组、十字链表)P90-91。
四、实验题
第 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的二叉树中,所含叶子的个数最多为( )。 【解答】2k-1
【分析】在满二叉树中叶子结点的个数达到最多。
⑹ 具有100个结点的完全二叉树的叶子结点数为( )。
【解答】50
【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。
⑺ 已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。则该树中有( )个叶子结点。
【解答】12
【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。
⑻ 某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是( )。
【解答】CDBGFEA
【分析】根据前序遍历序列和后序遍历序列将该二叉树构造出来。
⑼ 在具有n个结点的二叉链表中,共有( )个指针域,其中( )个指针域用于指向其左右孩子,剩下的( )个指针域则是空的。 【解答】2n,n-1,n+1
(10) 在有n个叶子的哈夫曼树中,叶子结点总数为( ),分支结点总数为( )。 【解答】n,n-1
【分析】n-1个分支结点是经过n-1次合并后得到的。