1、1第一章概论 自测题答案 一、填空题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的 操作对象 以及它们之间的 关系 和运算等的学科。2. 数据结构被形式地定义为(D, R) ,其中 D 是 数据元素 的有限集合,R 是 D 上的 关系 有限集合。3. 数据结构包括数据的 逻辑结构 、数据的 存储结构 和数据的 运算 这三个方面的内容。4. 数据结构按逻辑结构可分为两大类,它们分别是 线性结构 和 非线性结构 。5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。6 在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有
2、 1 个前驱结点;最后一个结点 没有 后续结点,其余每个结点有且只有 1 个后续结点。7. 在树形结构中,树根结点没有 前驱 结点,其余每个结点有且只有 1 个前驱结点;叶子结点没有 后续 结点,其余每个结点的后续结点数可以任意多个 。8. 在图形结构中,每个结点的前驱结点数和后续结点数可以 任意多个 。9数据的存储结构可用四种基本的存储方法表示,它们分别是顺序 、 链式 、 索引 和 散列 。10. 数据的运算最常用的有 5 种,它们分别是插入 、 删除、修改、 查找 、排序。11. 一个算法的效率可分为 时间 效率和 空间 效率。二、单项选择题( B )1. 非线性结构是数据元素之间存在一
3、种:A)一对多关系 B)多对多关系 C)多对一关系 D)一对一关系( C )2. 数据结构中,与所使用的计算机无关的是数据的 结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储( C )3. 算法分析的目的是:A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性( A )4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性 B) 正确性和简明性C) 可读性和文档性 D) 数据复杂性和程序复杂性( C )5. 计算机算法指的是:A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法( B
4、)6. 计算机算法必须具备输入、输出和 等 5 个特性。A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性三、简答题2.【严题集 1.2】数据结构和数据类型两个概念之间有区别吗?答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。3. 简述线性结构与非线性结构的不同点。答:线性结构反映结点间的逻辑关系是 一对一的,非线性结构反映结点间的逻辑关系是多对多的。四、 【严题集 1.8】分析下面各程序段的时间复杂度2. s=0;for i=0; itop
5、top=0 ST-toptop=m0( A )4. 李春葆判定一个队列 QU(最多元素为 m0)为满队列的条件是QU-rear QU-front = = m0 QU-rear QU-front 1= = m0 QU-front = = QU-rear QU-front = = QU-rear+1解:队满条件是元素个数为 m0。由于约定满队时队首指针与队尾指针相差 1,所以不必再减 1 了,应当选 A。当然,更正确的答案应该取模,即:QU-front = = (QU-rear+1)% m05( D )5数组用来表示一个循环队列,为当前队列头元素的前一位置,为队尾元素的位置,假定队列中元素的个数小
6、于,计算队列中元素的公式为()rf; () (nf r)% n; ()nr f; () (nrf)% n6. 【98 初程 P71】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。设有 4 个数据元素 a1、a2 、a3 和 a4,对他们分别进行栈操作或队操作。在进栈或进队操作时,按 a1、a2、a3、a4 次序每次进入一个元素。假设栈或队的初始状态都是空。现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是 A ,第二次出栈得到的元素是 B 是;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队
7、两次,出队一次;这时,第一次出队得到的元素是 C ,第二次出队得到的元素是 D 。经操作后,最后在栈中或队中的元素还有 E 个。供选择的答案:AD:a1 a2 a3 a4E: 1 2 3 0答:ABCDE2, 4, 1, 2, 27. 【94 初程 P75】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。栈是一种线性表,它的特点是 A 。设用一维数组 A1,n来表示一个栈, An为栈底,用整型变量 T 指示当前栈顶位置,AT 为栈顶元素。往栈中推入(PUSH )一个新元素时,变量 T 的值 B ;从栈中弹出(POP )一个元素时,变量 T 的值 C
8、。设栈空时,有输入序列 a,b,c,经过 PUSH,POP ,PUSH,PUSH,POP 操作后,从栈中弹出的元素的序列是 D ,变量 T 的值是 E 。供选择的答案:A: 先进先出 后进先出 进优于出 出优于进 随机进出B,C: 加 1 减 1 不变 清 0 加 2 减 2D: a,b b,c c,a b,a c,b a,cE: n+1 n+2 n n-1 n-2答案:ABCDE=2, 2, 1, 6, 4注意,向地址的高端生长,称为向上生成堆栈;向地址低端生长叫向下生成堆栈,本题中底部为 n,向地址的低端递减生成,称为向下生成堆栈。8. 【91 初程 P77】 从供选择的答案中,选出应填入
9、下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。在做进栈运算时,应先判别栈是否 A ;在做退栈运算时,应先判别栈是否 B 。当栈中元素为 n 个,做进栈运算时发生上溢,则说明该栈的最大容量为 C 。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 D 分别设在这片内存空间的两端,这样,只有当 E 时,才产生上溢。供选择的答案:A,B:空 满 上溢 下溢C: n-1 n n+1 n/2D: 长度 深度 栈顶 栈底E: 两个栈的栈顶同时到达栈空间的中心点 其中一个栈的栈顶到达栈空间的中心点 两个栈的栈顶在达栈空间的某一位置相遇 两个栈均不空,且
10、一个栈的栈顶到达另一个栈的栈底答案:ABCDE2, 1, 2, 4, 3四、简答题(每小题 4 分,共 20 分)1. 【严题集 3.2和 3.11】说明线性表、栈与队的异同点。刘答:相同点:都是线性结构,都是逻辑结构的概念。都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表,只是对插入、删除运算加以限制。不同点:运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入、删除运算,因而是后进先出表 LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表 FIFO。 用途不同,堆栈用于子程调用和保护现场,队列用于多道作业处理、指令寄存及其他运算等等。2.
11、 【 统考书 P60 4-11,难于严题集 3.1】设有编号为 1,2,3,4 的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。刘答:至少有 14 种。 全进之后再出情况,只有 1 种:4,3,2,1 进 3 个之后再出的情况,有 3 种,3,4,2,1 3,2,4,1 3,2,1,4 进 2 个之后再出的情况,有 5 种,2,4,3,1 2,3,4,1 2,1, 3,4 2,1,4,3 2,3,1,4 进 1 个之后再出的情况,有 5 种,1,4,3,2 1,3,2,4 1,3,4,2 1, 2,3,4 1,2,4,33. 【刘自编 】假设正读和反读都相同
12、的字符序列为“回文” ,例如, abba和abcba 是回文, abcde 和ababab则6不是回文。假设一字符序列已存入计算机,请分析用线性表、堆栈和队列等方式正确输出其回文的可能性?答:线性表是随机存储,可以实现,靠循环变量(j-)从表尾开始打印输出;堆栈是后进先出,也可以实现,靠正序入栈、逆序出栈即可;队列是先进先出,不易实现。哪种方式最好,要具体情况具体分析。若正文在机内已是顺序存储,则直接用线性表从后往前读取即可,或将堆栈栈顶开到数组末尾,然后直接用 POP 动作实现。 (但堆栈是先减后压还是)若正文是单链表形式存储,则等同于队列,需开辅助空间,可以从链首开始入栈,全部压入后再依次
13、输出。4. 【统考书 P60 4-13】顺序队的“假溢出”是怎样产生的?如何知道循环队列是空还是满?答:一般的一维数组队列的尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出” 。采用循环队列是解决假溢出的途径。另外,解决队满队空的办法有三: 设置一个布尔变量以区别队满还是队空; 浪费一个元素的空间,用于区别队满还是队空。 使用一个计数器记录队列中元素个数(即队列长度) 。我们常采用法,即队头指针、队尾指针中有一个指向实元素,而另一个指向空闲元素。判断循环队列队空标志是: f=rear 队满标志是:f=(r+1)%N5. 【统考书 P60 4-14】设循环队列的
14、容量为 40(序号从 0 到 39) ,现经过一系列的入队和出队运算后,有 front=11,rear=19; front=19,rear=11;问在这两种情况下,循环队列中各有元素多少个?答:用队列长度计算公式: (N rf)% N L=(40 1911)% 40=8 L=(401119)% 40=321. 【严题集 3.3】写出下列程序段的输出结果(栈的元素类型 SElem Type 为 char) 。void main( )Stack S;Char x,y;InitStack(S);X=c;y=k;Push(S,x); Push(S,a); Push(S,y);Pop(S,x); Pus
15、h(S,t); Push(S,x);Pop(S,x); Push(S,s);while(!StackEmpty(S) Pop(S,y);printf(y); ;Printf(x);答:输出为“stack ”。2. 【严题集 3.12】写出下列程序段的输出结果(队列中的元素类型 QElem Type 为 char) 。void main( )Queue Q; Init Queue (Q);Char x=e; y=c;EnQueue (Q,h); EnQueue (Q,r); EnQueue (Q, y);DeQueue (Q,x); EnQueue (Q,x); DeQueue (Q,x); E
16、nQueue (Q,a); while(!QueueEmpty(Q) DeQueue (Q,y);printf(y); ;Printf(x);答:输出为“char” 。3. 【严题集 3.13】简述以下算法的功能(栈和队列的元素类型均为 int) 。void algo3(Queue int d;InitStack(S);while(!QueueEmpty(Q) DeQueue (Q,d); Push(S,d);while(!StackEmpty(S) Pop(S,d); EnQueue (Q,d); 答:该算法的功能是:利用堆栈做辅助,将队列中的数据元素进行逆置。7第 45 章 串和数组 一、
17、填空题(每空 1 分,共 20 分)1. 不包含任何字符(长度为 0)的串 称为空串; 由一个或多个空格(仅由空格符)组成的串 称为空白串。(对应严题集 4.1,简答题:简述空串和空格串的区别)2. 设 S=“A;/document/Mary.doc”,则 strlen(s)= 20 , “/”的字符定位的位置为 3 。4. 子串的定位运算称为串的模式匹配; 被匹配的主串 称为目标串, 子串 称为模式。5. 设目标 T=”abccdcdccbaa”,模式 P=“cdcc”,则第 6 次匹配成功。6. 若 n 为主串长,m 为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为
18、(n-m+1)*m 。7. 假设有二维数组 A68,每个元素用相邻的 6 个字节存储,存储器按字节编址。已知 A 的起始存储位置(基地址)为1000,则数组 A 的体积(存储量)为 288 B ;末尾元素 A57 的第一个字节地址为 1282 ;若按行存储时,元素 A14 的第一个字节地址为 (8+4)6+1000=1072 ;若按列存储时,元素 A47 的第一个字节地址为 (674)61000)1276 。(注:数组是从 0 行 0 列还是从 1 行 1 列计算起呢?由末单元为 A57 可知,是从 0 行 0 列开始!)8. 00 年计算机系考研题设数组 a160, 170的基地址为 204
19、8,每个元素占 2 个存储单元,若以列序为主序顺序存储,则元素 a32,58的存储地址为 8950 。答:不考虑 0 行 0 列,利用列优先公式: LOC(aij)=LOC(ac1, c2)+(j-c2)*(d1-c1+1)+i-c1)*L得:LOC(a 32,58)=2048+(58-1)*(60-1+1)+32-1*289509. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。10.求下列广义表操作的结果:(1) GetHead【(a,b),(c,d)】= (a, b) ; /头元素不必加括号(2) GetHea
20、d【GetTail【(a,b),(c,d)】 】= (c,d) ;(3) GetHead【GetTail【GetHead【(a,b),(c,d)】 】 】= b ;(4) GetTail【GetHead【GetTail【(a,b),(c,d)】 】 】= (d) ;二、单选题(每小题 1 分,共 15 分)( B )1. 李串是一种特殊的线性表,其特殊性体现在:可以顺序存储 数据元素是一个字符 可以链式存储 数据元素可以是多个字符( B )2. 李设有两个串 p 和 q,求 q 在 p 中首次出现的位置的运算称作:连接 模式匹配 求子串 求串长( D )3. 李设串 s1=ABCDEFG,s2
21、=PQRST,函数 con(x,y)返回 x 和 y 串的连接串,subs(s, i, j)返回串 s 的从序号i 开始的 j 个字符组成的子串,len(s)返回串 s 的长度,则 con(subs(s1, 2, len(s2), subs(s1, len(s2), 2)的结果串是:BCDEF BCDEFG BCPQRST BCDEFEF解:con(x,y)返回 x 和 y 串的连接串,即 con(x,y)ABCDEFGPQRST ;subs(s, i, j)返回串 s 的从序号 i 开始的 j 个字符组成的子串,则subs(s1, 2, len(s2)subs(s1, 2, 5)= BCDE
22、F; subs(s1, len(s2), 2) subs(s1, 5, 2)= EF;所以 con(subs(s1, 2, len(s2), subs(s1, len(s2), 2)con( BCDEF, EF)之连接,即 BCDEFEF( A )4. 01 年计算机系考研题假设有 60 行 70 列的二维数组 a160, 170以列序为主序顺序存储,其基地址为10000,每个元素占 2 个存储单元,那么第 32 行第 58 列的元素 a32,58的存储地址为 。 (无第 0 行第 0 列元素)16902 16904 14454 答案 A, B, C 均不对答:此题与填空题第 8 小题相似。
23、(57 列60 行31 行)2 字节10000=16902( B )5. 设矩阵 A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组 B 1, n(n-1)/2 中,对下三角部分中任一元素 ai,j(ij), 在一维数组 B 中下标 k 的值是:i(i-1)/2+j-1 i(i-1)/2+j i(i+1)/2+j-1 i(i+1)/2+j6. 【91 初程 P78】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。解:注意 B 的下标要求从 1 开始。先用第一个元素去套用,可能有 B 和 C;再用第二个元素去套用 B 和
24、 C,B=2 而 C3(不符);所以选 B nnaaA,2,1,2,1,8有一个二维数组 A,行下标的范围是 0 到 8,列下标的范围是 1 到 5,每个数组元素用相邻的 4 个字节存储。存储器按字节编址。假设存储数组元素 A0,1的第一个字节的地址是 0。存储数组 A 的最后一个元素的第一个字节的地址是 A 。若按行存储,则 A3,5和 A5,3的第一个字节的地址分别是 B 和 C 。若按列存储,则 A7,1和 A2,4的第一个字节的地址分别是 D 和 E 。供选择的答案:AE :28 44 76 92 108 116 132 176 184 188答案:ABCDE=8, 3, 5, 1,
25、67.【94 程 P12】 有一个二维数组 A,行下标的范围是 1 到 6,列下标的范围是 0 到 7,每个数组元素用相邻的 6 个字节存储,存储器按字节编址。那么,这个数组的体积是 A 个字节。假设存储数组元素 A1,0的第一个字节的地址是 0,则存储数组 A 的最后一个元素的第一个字节的地址是 B 。若按行存储,则 A2,4的第一个字节的地址是 C 。若按列存储,则 A5,7的第一个字节的地址是 D 。供选择的答案AD:12 66 72 96 114 120 156 234 276 282 (11)283 (12)288答案:ABCD=12, 10, 3, 9三、简答题(每小题 5 分,共
26、 15 分)1. 【其他教材】已知二维数组 Am,m 采用按行优先顺序存放,每个元素占 K 个存储单元,并且第一个元素的存储地址为Loc(a11),请写出求 Loc(aij)的计算公式。如果采用列优先顺序存放呢?解:公式教材已给出,此处虽是方阵,但行列公式仍不相同;按行存储的元素地址公式是: Loc(aij)= Loc(a11) + (i-1)*m+(j-1) * K按列存储的元素地址公式是: Loc(aij)= Loc(a11) + (j-1)*m+(i-1) * K2.【全国专升本资格考试】递归算法比非递归算法花费更多的时间,对吗?为什么?答:不一定。时间复杂度与样本个数 n 有关,是指最
27、深层的执行语句耗费时间,而递归算法与非递归算法在最深层的语句执行上是没有区别的,循环的次数也没有太大差异。仅仅是确定循环是否继续的方式不同,递归用栈隐含循环次数,非递归用循环变量来显示循环次数而已。四、计算题(每题 5 分,共 20 分)1. 设 s=I AM A STUDENT, t=GOOD, q=WORKER, 求 Replace(s,STUDENT,q) 和Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)。解: Replace(s,STUDENT,q)I AM A WORKER 因为 SubString(s,6,2)A ;SubStr
28、ing(s,7,8) STUDENTConcat(t,SubString(s,7,8)GOOD STUDENT所以 Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)A GOOD STUDENT第六章 树和二叉树第 6 章 面是有关二叉树的叙述,请判断正误(每小题 1 分,共 10 分)( )1. 若二叉树用二叉链表作存贮结构,则在 n 个结点的二叉树链表中只有 n1 个非空指针域。( )2.二叉树中每个结点的两棵子树的高度差等于 1。 ( )3.二叉树中每个结点的两棵子树是有序的。 ( )4.二叉树中每个结点有两棵非空子树或有两棵空子树。 (
29、 )5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树(若存在的话)所有结点的关键字值。 (应当是二叉排序树的特点)( )6.二叉树中所有结点个数是 2k-1-1,其中 k 是树的深度。 (应 2i-1) ( )7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。 ( )8.对于一棵非空二叉树,它的根结点作为第一层,则它的第 i 层上最多能有 2i1 个结点。 (应 2i-1)( )9.用二叉链表法(link-rlink)存储包含 n 个结点的二叉树,结点的 2n 个指针区域中有 n+1 个为空指针。(正确。用二叉链表存储包含 n 个
30、结点的二叉树,结点共有 2n 个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有 n-1 个结点的链域存放指向非空子女结点的指针,还有 n+1 个空指针。 )即有后继链接的指针仅 n-1 个。( )10. 01 年计算机系研题具有 12 个结点的完全二叉树有 5 个度为 2 的结点。9最快方法:用叶子数n/26,再求 n2=n0-1=5 二、填空(每空 1 分,共 15 分)1 由个结点所构成的二叉树有 5 种形态。 2. 【计算机研 2000】 一棵深度为 6 的满二叉树有 n1+n2=0+ n2= n0-1=31 个分支结点和 26-1 =32 个叶子。注:满二叉树没有
31、度为 1 的结点,所以分支结点数就是二度结点数。3 一棵具有个结点的完全二叉树,它的深度为 9 。( 注:用 log 2(n) +1= 8.xx +1=94. 【全国专升本统考题】设一棵完全二叉树有 700 个结点,则共有 350 个叶子结点。答:最快方法:用叶子数n/2350 5. 设一棵完全二叉树具有 1000 个结点,则此完全二叉树有 500 个叶子结点,有 499 个度为 2 的结点,有 1 个结点只有非空左子树,有 0 个结点只有非空右子树。答:最快方法:用叶子数n/2500 ,n 2=n0-1=499。 另外,最后一结点为 2i 属于左叶子,右叶子是空的,所以有 1 个非空左子树。
32、完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数0.6. 【严题集 6.7】 一棵含有 n 个结点的 k 叉树,可能达到的最大深度为 n ,最小深度为 2 。答:当 k=1(单叉树)时应该最深,深度n(层) ;当 k=n-1(n-1 叉树)时应该最浅,深度2(层) ,但不包括 n=0 或 1 时的特例情况。教材答案是“完全 k 叉树” ,未定量。)7. 【96 程试题 1】 二叉树的基本组成部分是:根(N) 、左子树(L)和右子树(R ) 。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按 N L R 次序) ,后序法(即按 L R N 次序)和中序法(也称对称序法,即按
33、 L N R 次序) 。这三种方法相互之间有关联。若已知一棵二叉树的前序序列是 BEFCGDH,中序序列是 FEBGCHD,则它的后序序列必是 F E G H D C B 。 解:法 1:先由已知条件画图,再后序遍历得到结果;法 2:不画图也能快速得出后序序列,只要找到根的位置特征。由前序先确定root,由中序先确定左子树。例如,前序遍历 BEFCGDH 中,根结点在最前面,是B;则后序遍历中 B 一定在最后面。法 3:递归计算。如 B 在前序序列中第一,中序中在中间(可知左右子树上有哪些元素) ,则在后序中必为最后。如法对 B 的左右子树同样处理,则问题得解。8.【全国专升本统考题】中序遍历
34、的递归算法平均空间复杂度为 O(n) 。答:即递归最大嵌套层数,即栈的占用单元数。精确值应为树的深度 k+1,包括叶子的空域也递归了一次。9. 【计算机研 2001】 用 5 个权值3, 2, 4, 5, 1 构造的哈夫曼(Huffman)树的带权路径长度是 33 。解:先构造哈夫曼树,得到各叶子的路径长度之后便可求出 WPL(453)2(12)3=33(15)(9) (6) (注:两个合并值先后不同会导致编码不同,即哈夫曼编码不唯一)4 5 3 (3) (注:合并值应排在叶子值之后)1 2(注:原题为选择题:32 33 34 15)三、单项选择题(每小题 1 分,共 11 分)( C )1
35、不含任何结点的空树 。()是一棵树; ()是一棵二叉树; ()是一棵树也是一棵二叉树; ()既不是树也不是二叉树答:以前的标答是 B,因为那时树的定义是 n1( C )2二叉树是非线性数据结构,所以 。()它不能用顺序存储结构存储; ()它不能用链式存储结构存储; ()顺序存储结构和链式存储结构都能存储; ()顺序存储结构和链式存储结构都不能使用 ( C )3. 01 年计算机研题 具有 n(n0)个结点的完全二叉树的深度为 。() log2(n) () log 2(n) () log2(n) +1 () log2(n)+1注 1:x 表示不小于 x 的最小整数; x表示不大于 x 的最大整数
36、,它们与 含义不同!注 2:选(A)是错误的。例如当 n 为 2 的整数幂时就会少算一层。似乎 log 2(n) +1是对的?( A )4把一棵树转换为二叉树后,这棵二叉树的形态是 。()唯一的 ()有多种()有多种,但根结点都没有左孩子 ()有多种,但根结点都没有右孩子5. 【94 程 P11】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。10树是结点的有限集合,它 A 根结点,记为 T。其余的结点分成为 m(m0)个 B 的集合 T1,T2 ,Tm,每个集合又都是树,此时结点 T 称为 Ti 的父结点,T i 称为 T 的子结点(1im) 。一
37、个结点的子结点个数为该结点的 C 。供选择的答案A: 有 0 个或 1 个 有 0 个或多个 有且只有 1 个 有 1 个或 1 个以上 B: 互不相交 允许相交 允许叶结点相交 允许树枝结点相交C: 权 维数 次数(或度) 序答案:ABC 1, 1,36. 【95 程 P13】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。二叉树 A 。在完全的二叉树中,若一个结点没有 B ,则它必定是叶结点。每棵树都能惟一地转换成与它对应的二叉树。由树转换成的二叉树里,一个结点 N 的左子女是 N 在原树里对应结点的 C ,而 N 的右子女是它在原树里对应结点的
38、 D 。供选择的答案A: 是特殊的树 不是树的特殊形式 是两棵树的总称 有是只有二个根结点的树形结构 B: 左子结点 右子结点 左子结点或者没有右子结点 兄弟CD: 最左子结点 最右子结点 最邻近的右兄弟 最邻近的左兄弟 最左的兄弟 最右的兄弟答案:A= B= C= D 答案:ABCDE2,1,1,3四、简答题(每小题 4 分,共 20 分)1. 【严题集 6.2】一棵度为 2 的树与一棵二叉树有何区别?答:度为 2 的树从形式上看与二叉树很相似,但它的子树是无序的,而二叉树是有序的。即,在一般树中若某结点只有一个孩子,就无需区分其左右次序,而在二叉树中即使是一个孩子也有左右之分。第 7 章
39、图一、单选题(每题 1 分,共 16 分) 前两大题全部来自于全国自考参考书!( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍。A1/2 B. 1 C. 2 D. 4 ( B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 倍。A1/2 B. 1 C. 2 D. 4 ( B )3. 有 8 个结点的无向图最多有 条边。A14 B. 28 C. 56 D. 112 ( C )4. 有 8 个结点的无向连通图最少有 条边。A5 B. 6 C. 7 D. 8 ( C )5. 有 8 个结点的有向完全图有 条边。A14 B. 28 C. 56 D. 112 ( B
40、)6. 用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。A栈 B. 队列 C. 树 D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。A栈 B. 队列 C. 树 D. 图 二、填空题(每空 1 分,共 20 分)1. 图有 邻接矩阵 、 邻接表 等存储结构,遍历图有 深度优先遍历 、 广度优先遍历 等方法。2. 有向图 G 用邻接表矩阵存储,其第 i 行的所有元素之和等于顶点 i 的 出度 。3. 如果 n 个顶点的图是一个环,则它有 n 棵生成树。 (以任意一顶点为起点,得到 n-1 条边)4. n 个顶点 e 条边的图,若采用邻接矩阵存储,则
41、空间复杂度为 O(n2) 。5. n 个顶点 e 条边的图,若采用邻接表存储,则空间复杂度为 O(n+e) 。6. 设有一稀疏图 G,则 G 采用 邻接表 存储较省空间。7. 设有一稠密图 G,则 G 采用 邻接矩阵 存储较省空间。8. 图的逆邻接表存储结构只适用于 有向 图。9. 已知一个图的邻接矩阵表示,删除所有从第 i 个顶点出发的方法是 将邻接矩阵的第 i 行全部置 0 。10. 图的深度优先遍历序列 不是 惟一的。1111. n 个顶点 e 条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为 O(n2) ;若采用邻接表存储时,该算法的时间复杂度为 O(n+e) 。12. n 个
42、顶点 e 条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为 O(n2) ;若采用邻接表存储,该算法的时间复杂度为 O(n+e) 。13. 图的 BFS 生成树的树高比 DFS 生成树的树高 小或相等 。14. 用普里姆(Prim)算法求具有 n 个顶点 e 条边的图的最小生成树的时间复杂度为 O(n2) ;用克鲁斯卡尔( Kruskal)算法的时间复杂度是 O(elog2e) 。15. 若要求一个稀疏图 G 的最小生成树,最好用 克鲁斯卡尔(Kruskal) 算法来求解。16. 若要求一个稠密图 G 的最小生成树,最好用 普里姆(Prim) 算法来求解。17. 用 Dijkstra 算
43、法求某一顶点到其余各顶点间的最短路径是按路径长度 递增 的次序来得到最短路径的。18. 拓扑排序算法是通过重复选择具有 0 个前驱顶点的过程来完成的。第 8 章 查找 一、填空题(每空 1 分,共 10 分)1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。2. 线性有序表(a 1,a 2,a 3, a256)是从小到大排列的,对一个给定的值 k,用二分法检索表中与 k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。设有 100 个结点,用二分法查找时,最大比较次数是 7 。3. 假设在有序线性表 a20上进行折半查找,则比较一次查找成功的结点数为
44、1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。解:显然,平均查找长度O(log 2n)5 次(2 5) 。但具体是多少次,则不应当按照公式来计算(即(21log 221)/204.6 次并不正确!) 。因为这是在假设 n2 m-1 的情况下推导出来)1(log2nASL的公式。应当用穷举法罗列:全部元素的查找次数为(1224384 55)74; ASL74/20=3.7 !4 【计研题 2000】折半查找有序表(4,6,12,20,28,38,50,70,88,100) ,若查找表中元素 20,它将依次与表中元素 28,6,12,20 比较大
45、小。5. 在各种查找方法中,平均查找长度与结点个数 n 无关的查找方法是 散列查找 。6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。7. 有一个表长为 m 的散列表,初始状态为空,现将 n(nm)个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。如果这 n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 12n-1) 。( 而任一元素查找次数 n-1)二、单项选择题(每小题 1 分,共 27 分)( B )1在表长为的链表中进行线性查找,它的平均查找长度为. ; . (); . ; . ()n( A )2 【计研题 2001】折半查找有序表( 4,6,10,12,20 ,30,50,70,88,100) 。若查找表中元素 58,则它将依次与表中 比较大小,查找结果是失败。A20,70,30,50 B30 ,88,70,50 C20,50 D30,88,50( C )3 【计研题