1、1数据结构期末复习题 1(0907)一、基本要求1 数据结构基本概念(1 ) 数据、数据对象和数据结构(逻辑、物理结构、基本操作)(2 ) 抽象数据类型(3 ) 算法的特征及评价的标准2 线形结构(1 ) 顺序表的特点及存储结构(2 )链表的特点及存储结构(3 ) 栈的特点及基本操作(4 )队列的特点及基本操作(5 ) 顺序串和链串的存储结构(6 )二维数组的地址计算(7 )特殊矩阵的概念及存储结构(对称、三角、对角、稀疏)(8 ) 广义表的概念及存储结构(9 )线性表的排序(简单插入、选择和交换)(10 )线性表的查找(顺序、折半和分块索引)3 树形结构(1 ) 二叉树的性质及存储结构(顺序
2、、二叉链表、三叉链表)(2 ) 二叉树的遍历(3 )线索二叉树(4 ) 树的存储结构(双亲、孩子-双亲、孩子-兄弟链表)(5 ) 树、二叉树与森林的转化方法(6 )哈夫曼树(7 )二叉排序树及平衡化(8 )堆排序树(9 )树的等价类划分4图形结构(1 ) 图的定义及存储结构(2 )图的深度优先和广度优先遍历。(3 ) 图的连通性(4 )最小(代价)生成树(5 ) 拓扑排序(6 ) 关键路径(7 ) 最短路径(单源、顶点对)5查找表(1 ) 散列表的概念(2 ) 散列表解决散列冲突的方法(开放地址法、链地址法)(3 ) 散列表的插入和删除(4 ) B_树的概念、存储结构及基本操作(查找、插入、删
3、除)6排序方法(1 )希尔排序(2 )快速排序(3 )二路归并排序(4 )基数排序(链式、计数)(5 )排序方法比较和分析(时间性能、空间性能、稳定性)2二、单选题1要求具有同一逻辑结构的数据元素具有相同的特性,其含义为A. 数据元素具有同一的特点B. 数据元素其对应的数据个数及数据项的类型要一致C. 每个数据元素都一样D. 仅需要数据元素包含的数据项的个数相同2在一个单链表中,已知*q 结点是*p 结点的前驱结点,若在*q 和*p 之间插入结点*s,则执行操作A. s-next=p-next;p-next=s; B. s-next=p;p-next=sC. q-next=s;s-next=p
4、; D. p-next=s;s-next=q;3设指针 p 指向双链表的某一结点,则双链表结构的对称性可以用下面的操作来反映A. p-prior-next=p-next-next; B. p-prior-prior=p-next-prior;C. p-prior-next=p- next-prior; D. p-next-next= p-prior-prior;4 表达式 a*(b+c)-d 的后缀表达式是Aabcd*+- Babc+*d- Cabc*+d- D -+*abcd5 设一个栈的输入序列为 A,B,C,D,则借助一个栈所得到的输出序列不可能是AA,B,C,D BD,C,B,A C.
5、 A,C,D,B D. D,A ,B,C6 设有一个顺序栈的入栈序列是 a、b、c,则 3 个元素都出栈的可能不同排列个数为A4 B5 C. 6 D. 77 若已知一个栈的入栈序列是 1,2,3 ,n ,其输出序列为 pl,p2 ,p3,pn ,若 pl 是 n,则 pi 是Ai Bn-i Cn-i+1 D不确定8 已知广义表 LS=(a,b,c),(d,e,f),运算 head 和 tail 函数取出元素 e 的运算是A head(tail(LS) Btail(head(LS)Chead(tail(head(tail(LS) Dhead(tail(tail(head(LS)9 二维数组 A
6、的每个元素是由 6 个字符组成的串,其行下标 i=0,l,8,列下标为 j=1,210。设每个字符占一个字节,若按行先存储,元素 A8,5的起始地址与 A 按列存储时起始地址相同的元素是AA8,5 BA3,10 CA5,8 DA0,910 数组 A15,16的每个元素占 5 个单元,将其按行优先次序存储在起始地址为 1000 的连续的内存单元中,则元素 A5,5 的地址为A. 1140 B. 1145 C. 1120 D. 112511 某二叉树的先序序列和后序序列正好相反,则该二叉树的特点一定是A. 空或只有一个结点 B. 高度等于其结点数 C. 任一结点无左孩子 D. 任一结点无右孩子31
7、2 下列说法正确的是(1)二又树按某种方式线索化后,任一节点均有指向前趋和后继的线索(2)二叉树的前序遍历序列中,任意一个节点均处于在子孙节点前(3)二叉排序树中任一节点的值大于其左孩子的值,小于右孩子的值A (1)(2)(3) B(1)(2) C(1)(3) D前面的可选答案都不对13 下面的说法中正确的是(1)任何一棵二叉树的叶子节点在三种遍历中的相对次序不变。(2)按二叉树定义,具有三个节点的二叉树共有 6 种。A (1), (2) B(1) C(2) D(1),(2)都错14 树有先根遍历和后根遍历,树可以转化为对应的二叉树。下面的说法正确的是A树的后根遍历与其对应的二叉树的后根遍历相
8、同 B树的后根遍历与其对应的二叉树的中根遍历相同C树的先根遍历与其对应的二叉树的中根遍历相同 D以上都不对15 .下图的邻接表中,从顶点V1 出发采用深度优先搜索法遍历该图,则可能的顶点序列是 A. V1V2V3V4V5 B. V1V2V3V5V4 C. V1V4V3V5V2 D. V1V3V4V5V2 16 以下说法不正确的是A无向图中的极大连通子图称为连通分量B连通图的广度优先搜索中一般要采用队列来暂存刚访问过的顶点C图的深度优先搜索中一般要采用栈来暂存刚访问过的顶点D有向图的遍历不可采用广度优先搜索17 在平衡二叉树中插入一个结点后引起了不平衡,设最低(最接近于叶子)的不平衡点是 A,并
9、已知 A 的左、右孩子的平衡因子分别为-1 和 0,则应进行的平衡旋转是ALL 型 BLR 型 CRL 型 DRR 型18 设哈希表长为 14,哈希函数 H(key)=key11,表中已有数据的关键字为 15,38,61 ,84,四个,现将关键字为 49 的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是A8 B3 C 5 D919 对散列文件,以下说法错误的是A散列文件插入、删除方便,不需要索引区且节省存储空间B散列文件只能按关键字随机存取且存取速度快C经过多次插入、删除后,可能出现溢出桶满的情况D散列文件顺序存取方便20 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点
10、为 A,并已知 A 的左孩子的平衡因子为40,右孩子的平衡因子为 1,则应调整以使其平衡,所作的平衡旋转是A. LL 型 B. LR 型 C. RL 型 D. RR 型21 在 n 个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为A. O(n) B. O(log2n) C. O(nlog2n) D. O(n2)22 下列排序算法中,在待排序数据已基本有序时,效率最高的排序方法是A插入 B选择 C快速 D堆23 关键路径是事件结点网络中A从源点到汇点的最长路径 B从源点到汇点的最短路径C最长的回路 D最短的回路24将两个各有 n 个元素的有序表归并成一个有序表,其最少的比
11、较次数是An B2n-1 C2n Dn-125 下列排序算法中,时间复杂度不受数据初始状态影响,恒为0(nlog2n)的是A. 堆排序 B. 冒泡排序 C. 直接选择排序 D. 快速排序26 数据表 A 中有 10000 个元素,如果仅要求求出其中最大的 10 个元素,则采用最节省时间的排序算法是A. 堆排序 B. 希尔排序 C. 快速排序 D. 直接选择排序27 在分块索引查找的索引表中查找,算法中采用的技术是A. 穷举法 B. 贪心法 C. 分治法 D. 回溯法 28 有向图 G 用邻接矩阵 A 存储,则顶点 i 的入度等于 A 中A. 第 i 行 1 的元素之和 B. 第 i 列 1 的
12、元素之和C. 第 i 行 0 的元素个数 D. 第 i 列非 0 的元素个数三、问答题1数据结构被形式地定义为(D,R) ,其中 D 和 R 的含义是什么。 (D 是数据元素的集合,R 是数据关系的集合) 。数据的逻辑结构包括哪四种类型。 (线性结构、树形结构、图形结构、集合类型) 。从存储结构的概念上讲,顺序表是线性表的(顺序存储结构 ) ,链表是(链式存储结构) 。2算法的五个重要特性有哪些。 (有穷性、确定性、可行性、输入、输出) 。抽象数据类型是指一个(数学模型)以及定义在该模型上的(一组操作) 。3 在含有 n 个结点的顺序存储的线性表中,在任意一个结点前插 入一个结点所需要移动结点
13、的平均次数为( n/2 ) 。在含有 n 个结点的顺序存储的线性表中,任意删除一个结点所需要移动结点的平均次数为( n-1/2 ) 。对一个线性表分别进行遍历和逆置运算,其最好的时间复杂度量级均为(O(n)) 。4线性结构中的一个结点代表一个(数据元素 ) 。若线性表中最常用的操作是取第 i 个元素和查找该元素的前驱,则采用的存储方式最能节省时间的是(顺序表 ) 。若最常用的操作是插入和删除第 i 个元素,则采用的存储方式最能节省时间的是(单链表 ) 。5 在一个不带头结点的单链表中,在表头插入或删除与在其他位置插入或删除操作过程不同, ,需要修改(头指针) 。在单链表中设置头结点的作用是(便
14、于操作) ,无论链表是否为空。使(头指针)均不为空。对于双向链表,在两个结点之间插入一个新结点需修改的指针共有(4 个) ,单链表为(2 个) 。6 如果以链栈为存储结构,则出栈操作时( 必须判别栈空 ),与顺序栈相比,链栈有一个明显的优势是( 不易出现栈满 )。57 循环队列采用数组 data1 n 来存储元素的值,并用 front 和 rear 分别作为其头尾指针。为区分队列的满和空,约定:队中能够存放的元素个数最大为 n-l,也即至少有一个元素空间不用,则在任意时刻,至少可以知道一个空的元素的下标是(front) ;入队时,可用语句(rear=rear+1%n)求出新元素在数组 data
15、 中的下标。8 已知栈的输入序列为 1,2,3 ,n ,输出序列为 a1,a2, ,an ,a2=n 的输出序列共有(n-1)种输出序列。9 稀疏矩阵一般的压缩存储方法有两种,它们是用(哈希表、三元组和十字链表 )。对矩阵压缩存储是为了(节省空间)。10 将下三角矩阵 Al8,18的下三角部分逐行地存储到起始地址为 1000 的内存单元中,已知每个元素占 4 个单元,则 A7,5 的地址为 (1100) 。11 已知数组 A110,110为对称矩阵,其中每个元素占 5 个单元。现将其下三角部分按行优先次序存储在起始地址为 1000 的连续的内存单元中,则元素 A5,6对应的地址为(1095)
16、。12 两个串相等的充要条件是,两个串的(长度) 相等,且其所对应各个位置的(字符)也相等。13 取出广义表 A=(x,(a,b,c ,d)中原子 C 的函数是( head(tail(tail(head(tail(head(A) ) 。14 在有 n 个结点的二又链表中,值为非空的链域的个数为(n-1 ) 。在有 n 个叶子结点的哈夫曼树中,总结点数是(2n-1) 。在树形结构中,根结点数只有(1 个) ,其余每个结点有且仅有一个元素(前驱)结点。15 一棵二叉树 L 的高度为 h,所有结点的度或为 0,或为 2,则这棵二叉树最少的结点数为( 2h-1 )。已知二叉树有 50 个叶子结点,则该
17、二叉树的总结点数至少是( 99) 。将一棵有 100 个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为 1,则编号为 49 的结点的左孩子编号为(98 ) 。有 64 个结点的完全二叉树的深度为( 7 )。16拓扑排序只能用于(有向无环图) 。连通图是指图中任意两个顶点之间(都连通的无向图 ) 。一个有 n 个顶点的无向连通图,它所包含的连通分量个数最多为( 1 )个。任何一个无向连通图的最小生成树(有一棵或多棵) 。若含有 n 个顶点的图形成一个环,则它有(n )棵生成树。17 求图的最小生成树有两种算法, (prim(普里姆) )算法适合于求稠密图的最小
18、生成树, (kruskal(克鲁斯卡尔)算法适合于求稀疏图的最小生成树。设图 G 用邻接表存储,则拓扑排序的时间复杂度为 (O(n+e) )。18在一棵三叉树中,度为 3 的结点数为 2 个,度为 2 的结点数为 1 个,度为 1 的结点数为 2 个,则度为 0 的结点数为( 6 )。19 中序表达式 A*(B+C)(D-E+F)的后序表达式是(ABC+*DE-F+/ )。 20 有向图 G 用邻接矩阵 A 存储,则顶点 i 的入度等于 A 中(第 i 列 1 的元素之和 ) 。具有 10 个顶点的无向图,边的总数最多为(45)个,具有 n 个顶点的强连通有向图 G,边的总数至少有(n)条。2
19、1 从未排序序列中依次取出元素与已排序序列(初始时为空 )中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为( 插入排序 )。对于关键字序列(12,13,11 ,18,60 ,15,7,18,25 ,100) ,用筛选法建堆,则开始结点的键值必须为( 60 ) 。22 在有序表 Al20中,采用二分查找算法查找元素值等于 A12的元素,所比较过的元素的下标依次为(10,15,12) ,查找元素值等于 5 的元素,所比较过的元素个数为(5 )个。分别采用堆排序、快速排序、插入排序和归并排序算法对初始状态为递增序列的表按递增顺序排序,最省时间的是(插入排序)算法,最费时问的是(快速排序)
20、算法。直接选择排序算法所执行的元素交换次数最多为(n-1)次,最好情况下所作的交换元素的次数为(0)次。在 堆排序,希尔排序,快速排序,归并排序算法中,占用辅助空间最多的是 (归并排序)。二分查找法要求查找表中各元素的关键字的值得排列必须是(递增或递减或有序 ) 。23 若一个待散列存储的线性表长度为 n,用于散列的散列表长度为 m,则 m 应(小于等于)n ,装填因子公式为(n/m) 。散列表的平均查找长度(与处理冲突方法有关而与表的长度有关 )。24 在平衡二叉树上删除一个结点后可以通过旋转使其平衡,最坏6情况下需旋转(O(log 2n) )次。25对于单链表、单循环链表和双向链表,若仅仅
21、知道一个指向链表中某结点的指针 p,能否将 p 所指的结点的数据元素与它的直接前趋(假设存在)交换?若不可以,说明理由;若可以,写出主要算法。(1 )单链表不能,单循环链表和双向链表可以。(2)单循环链表 q=p;while(qnext!=p) q=qnext;temp=pdata; pdata=qdata;qdata=temp;(3)双向链表:q=pprior; temp=qdata; qdata=pdata;pdata=temp;26设有三对角矩阵 a1n,1n把非零元素按列存储在向量 b13*n-2中,使得 bk=ai,j。求: 用 i,j 表示 k 的下标变换公式 (k=2*(j-1)
22、+i) 用 k 表示 i,j 的下标变换公式 (j=(k DIV 3)+1 i=k-2*(j-1))27内存中一片连续空间(不妨设地址从 1 到 m) ,提供给两个栈 S1 和 S2 使用,怎样分配这部分存储空间,使得对任意一个栈,仅当这部分全满时才发生上溢。(为了尽量利用空间,减少溢出的可能,可采用栈顶相向,栈底分设两端的存储方式,这样,对任何一个栈,仅当整个空间全满时才会发生上溢。) 28有一 n 个结点的树,其中所有分支结点的度均为 k,求该树中叶子结点的个数。设 no 为叶子结点数,n k 为度为 k 的结点数,n 为结点总数依题意:n=n o+nk (1) n= knk+1 (2)综
23、合(1) 和(2) 得: no=n-(n-1)/k 29. 设有 n 个无序元素,按非递减次序排序,但只想得到前面长度为 k 的部分序列,其中 nk,最好采用什么排序方法?为什么?如有这样一个序列:59,11,26,34,17,91,25 ,得到的部分序列是11,17,25,对于该例使用所选择的方法实现时,共执行多少次比较?(1 )采用堆排序最合适,因为当部分序列较小时,堆排序的时间复杂度近似为 O(n)。(2 )初始建堆: 比较 8 次 输出 11,第一次调整:比较次,输出 17第二次调整:比较 2 次,输出 25,总共比较 14 次。30. 设二叉排序树中关键字由 1 至 1000 的整数
24、组成,现要查找关键字为 363 的结点,下述关键字序列哪一个不可能是在二叉排序树中查到的序列?说明原因。 51,250,501,390,320,340,382,363; 24,877,125,342,501,623,421,363;(1)是;不是。因为查询序列是:查 421 时,其 623 左、右两个区间都不存在,查找失败。)31. 在执行某个排序算法过程中,出现了排序关键字朝着最终排序序列相反方向的移动,从而认为该算法是不稳定的,这种说法对么?为什么?(不正确。算法的稳定性是考察最终排行的位置交换,与中间过程无关。如:对于整数序列(18,36 ,25) 。按基数排序的 LSD 方法,第一趟排
25、序后(25,36,18) ,第二趟排序后得到( 18,25,36 ) ,18 虽向相反方向移动,但不影响最终位置。 )33. 将算术表达式(a+b )+c*(d+e)+f)*(g+h)转化为二叉树二叉链表结构)。四、应用题1有一个二叉树按层次顺序存放在一维数组中,如下图所示:试求:(1)该树的后序遍历序列。 (C,E,B,D,A)7(2)画出该树的后序线索树。1 2 3 4 5 6 7 8 9 10 11 2按顺序输入下列顶点对: (1,2)、(1,6)、(2,6)、(1,4)、(6,4)、(1,3) 、(3,4) 、(6,5)、(4,5)、(1,5)、(3,5) ,(1 )画出相应的邻接表。
26、(2)写出在邻接表上,从顶点 3 开始(表下标从 0 开始)的 DFS 序列和 DFS 生成树。(1)邻接表(2 ) DFS 序列 2-0-1-5-3-43设一哈希表长为 13,采用线性探测法解决冲突,哈希函数H(key)=key%13,(1 )画出在空表中依次插入关键字 25,20,36,15,41,52,29,72 , 67 后的哈希表。(2 )求在等概率情况下,查找成功和查找不成功的平均查找长度。(1 ) 100 101 102 103 104 105 106 107 108 109 110 111 11252 15 41 29 67 20 72 36 25(2 )平均查找长度查找成功的
27、平均查找长度=(5*1+3*2+1*4)/9=1.6查找不成功的平均查找长度=(2+1+5+4+3+2+1+3+2+1+2+1+3)/13=30/134对下面的关键字集(30 ,15,21,40,25 ,26,36, 37) ,若查找表的装填因子为 0.8,采用线性探测再散列解决冲突:(1)设计哈希函数;(2)画出哈希表;(1 ) 表长: m=n/=8/0.8 =10 哈希函数: H(key)=key%7 (2)哈希表0 1 2 3 4 5 6 7 8 9 A C B E D21 15 30 36 25 40 26 37 V1V2V3 V4V5V6 123450123454454242030
28、2 30 5350 1 130 5 85写出对关键字序列503,087,512,061,908,124,897,275,653,426建立一棵平衡二叉排序树的过程,并写出调整平衡时的旋转类型。503 503 087 512 RL 087 897 061 124 908 061 124 512 908 897 503 503 087 897 RR 087 897 061 124 512 908 061 275 512 908 275 653 124 426 653 426 五、算法分析与设计题1设有一个正整数序列组成的非递减有序单链表,阅读下面的算法,指出该算法的功能,并在“/后面加上必要的注释
29、。void F1 (Linklist L;int,x) p= Lnext; q=p; /p 为工作指针pre=L; Lnext=NULL; ./q 指最小元素while(P /初始化,p 为工作指针while(p) min=p; (1)_;/ q 为插入指针,min 为当前最小指针while(2)_) /一趟选择排序if(qdatadata) min=p; q=qnext;/while(q)if( (3)_)/ 交换temp=pdata; pdata=min data;mindata=temp; /ifp=pnext; /while(p)/F2(1 ) q=pnext; (2)q 或 q !=
30、null (3)min!= p105设计算法 DeleteX 的功能是:删除单链表 L 中值为 x 的结点的直接前趋结点。 (设 L 是带头结点的单链表的头指针,并为已知的 LinkList 类型)void DeleteX(LinkList /初始化,p 为工作指针while(pp=pnext;/ whileif(p) /删除qnext=pnext; free(p);/if/ DeleteX6 Internet 的域名系统是一个典型的层次结构,可用树形结构表示。每一个域名服务器提供的区域信息恰好是以该结点为根的子树中的全部的 IP 地址。设计算法以孩子-兄弟链表作为树的存储结构,实现搜索所有
31、www 域名的 IP 地址。void Outpath(CSTree T,Stack /输出一条路径else Outpath(Tfirstchild , T=Tnextsibiling; / 遍历右子树/while/Outpath 7设计算法实现以逆邻接表为存储结构的有向图的拓扑排序(要求给出逆邻接表的存储结构定义) 。(1)存储结构定义顶点结构 表结点结构 (2) 算法设计int toposort (ALGraph G,int tpv)/以逆邻接表为存储结构的有向图的拓扑排序top=0;for(i=0;idata=Bj; /创建根结点if(2*j2h) tLchild=null;/无左子树el
32、se /递归创建左子树tLchild=CreateTree(B,2*j,tLchild);if(2*j+12h) tRchild=null;/无右子树else /递归创建右子树tRchild=CreateTree(B,2*j+1,tRchild);/ CreateTree 9假设哈希函数为 H(key ),编写用链地址法解决冲突的哈希表的插入和删除算法。void F2( HashTable ;/ 获取哈希地址if(Hi=Null) s=(Linklist)malloc(sizeof(Lnode); sdata=key; snext=Hi; Hi=s; /ifelse p=Hi;/ 查找whil
33、e(p if(pdata=key) exit(1);else s=(Linklist)malloc(sizeof(Lnode);/ 产生新结点,插入表头snext=Hi; Hi=s;/ else/else/F2void Delete_HS(HashTable /获得哈希地址if(Hi= =Null) exit(1);p=Hi;q=p; / p 为工作指针, q 为 p 前趋12while(p p=pnext;/while if(!p) exit(1);if(q=Hi) /key 为第一结点Hipnext; free(p);/ ifelseqnext=pnext; free(p);/else/D
34、elete_HS10设有一个由正整数组成的无序单链表,阅读下面的算法,指出该算法的功能,并在“/” 后面加上必要的注释。void F1(Linklist pre=p; /pre 为最小结点指针while(p) if(pdatanext=p;p-next=s; B. s-next=p-next;p-next=sC. s-next=p-next;p=s; D. p-next=s;s-next= p ;3 循环队列 AOm-1存放其元素值,用 front 和 rear 分别表示队头及队尾,则循环队列满的条件是A(Q.rear+1) m=Q.front BQ.rear=Q.front+1CQ.rear
35、+l=Q.front DQ.real=Q.front4将一棵有 100 个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为 49 的结点的左孩子编号为A. 98 B. 99 C. 50 D. 485 关于散列法查找说法正确的是A采用链地址解决冲突时,查找一个元素的时间是相同的B采用链地址解决冲突时,若规定插入总是在链首,则插入任一个元素的时间是相同的C采用链地址解决冲突容易引起聚集现象13D再散列不易产生聚集(二) 填空题1在线性结构中,开始结点没有( )结点,最后一个元素没有( )结点。2 数组 Al10,110 的每个元素占 5 个单元,将其按
36、列优先次序存储在起始地址为 1000 的连续的内存单元中,则元素 A5,6 的地址为( ) 。3 求图的最小生成树有两种算法,( ) 算法适合于求稠密图的最小生成树。4 在索引顺序表上实现分块查找,在等概率查找情况下,其平均查找长度不仅与表的长度有关,而且与每一块中的元素( )有关。5 分枝定界的搜索策略与广度优先 类似,而回溯方法则采用( )搜索策略。(三) 应用题1. 已知一棵二叉树的先序序列和中序序列分别为:abdgicefhj 及 bgidaecfjh,画出该的二叉树的后序线索二叉树。2. 假设通信电文使用的字符集为a,b,c,d,e,f,g,字符的哈夫曼编码依次为:0110,10,1
37、10,111,00,0111 和010。(1 )画出此哈夫曼树。(2)若这些字符在电文中出现的频度分别为 3、35、13、15 、20、5 、9,求哈夫曼树的带权路径长度。(四) 算法阅读题1. 已知二叉树的存储结构为二叉链表,LinkList 和 BiTree 为已定义的指针类型,ListNode 为已定义的结点类型,阅读下面算法并回答:LinkList L=Null; p;void F2(BiTree T)if(T) F2(Tlchild);if(!Tlchild)pdata=Tdata; pnext=L;L=p; /ifF2(Trchild);/if/F2(1) 说明该算法的功能;(2)
38、 对于一棵有 8 个结点的完全二叉数(假设结点顺序为 A、B 、C 、D、E、F、G、H) ,画出执行上述算法后建立的结构。(五) 算法设计题1. 设计算法,判断一个以邻接表为存储结构的无向图 G 是否连通有,若连通,则返回 1,否则,返回 0。int connect(ALGraph G)/判断以邻接表为存储结构的无向图是否连通flag=1;for(i=0;iG.vexnum;i+) visitedi=0; dfs(G,visited,0); for(i=0;iG.vexnum;i+)if(visitedi=0) 14flag=0; breek;return flag;/ connectvoid dfs(ALGraph G,int visited,int v)/采用深度优先遍历的算法思想visitedv=1;p=G.verv.firstarc;while(p)if(visitedpadjvex=0)dfs(G,visited,padjvex);p=pnext;/whike/dfs