1、(完整版)数据结构概论数据结构概论考核题一、单项选择题 (每小题2分,共30分)1.下列编码中属前缀码的是( A ) A。1,01,000,001 B。1,01,011,010 C。0,10,110,11 D。0,1,00,112. 设栈S和队列Q的初始状态为空,元素a,b,c,d,e,f依次进栈,一个元素退栈后即进入队列Q,若6个元素的出队的序列是b,d,c,f,e,a,则栈S的容量至少应当是( C ) A。6 B.4 C。3 D.23.在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是( B ) A。O(1) B.O(n) C.O(nlogn) D.O(n2)4.要表
2、示省,市,区,街道的有关数据及其关系,选择( B )比较合适。 A。线性结构 B。树结构 C.图结构 D.集合结构5。链栈与顺序栈相比,比较明显的优点是( D ) A。插入操作更加方便 B。删除操作更加方便 C。不会出现下溢的情况 D。不会出现上溢的情况6.二叉树中第5层上的结点个数最多为( C ) A。8 B.15 C.16 D。327.在表长为的链表中进行线性查找,查找成功时,它的平均查找长度为( B ) A。ASL=n B.ASL=(n+1)/2 C.ASL=+1 D.ASLlog2(n+1)18。对22个记录的有序表进行折半查找,当查找失败时,至少需要比较( B )次关键字。 A。3
3、B。4 C.5 D。69。已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是( A ) A. 0 3 2 1 B。 0 1 2 3 C. 0 1 3 2 D。0 3 1 2(第9题配图:数组的下标为0,1,2,3)10.对于哈希函数H(key)=key13,被称为同义词的关键字是( D ) A。35和41 B。23和39 C。15和44 D。25和5111.图的深度优先遍历类似于二叉树的( A ) A.先序遍历 B.中序遍历 C。后序遍历 D.层次遍历12.下述几种排序方法中,稳定的排序算法是( A ) A。直接插入排序 B。快速排序 C.堆排序 D.希尔排序13。依次
4、取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为( C ) A。希尔排序 B。冒泡排序 C.插入排序 D.选择排序14.二叉树是非线性数据结构,所以 ( A ) A。它不能用顺序存储结构存储 B.它不能用链式存储结构存储 C.顺序存储结构和链式存储结构都能存储 D.顺序存储结构和链式存储结构都不能使用15。有8个结点的无向图最多有( B )条边。 A.14 B。28 C.56 D。112二、填空题(每小题1分,共15分)1 当问题的规模n趋向无穷大时,算法执行时间T(n)的数量级被称为算法的_时间复杂度_。2 设数组aM(M为最大空间个数)作为循环
5、队列Q的存储空间,front为队头指针(指向第一个存放数据的位置),rear为队尾指针(指向最后一个存放数据位置的下一个),则判定Q队列的队满条件是_ front=rear _.3 若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是_ FEGHDCB_。4假设S和X分别表示进栈和出栈操作,由输入序列“ABC得到输出序列“BCA”的操作序列为SSXSXX,则由“ab+c/d得到“abcd/+”的操作序列为_ b,c, d,a_。5 在一棵度为3的树中,度为2的结点个数是1,度为0的结点个数是6,则度为3的结点个数是_2_。6 在数据的存放无规律而言的线性表中
6、进行检索的最佳方法是_线性查找_。7 n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为_1_;若采用邻接表存储时,该算法的时间复杂度为_2_ 。8 在堆排序和快速排序中,若初始记录接近正序或反序,则选用_堆排序_;若初始记录基本无序,则最好选用_快速排序_。9 若要求一个稠密图G的最小生成树,最好用_普里姆_算法来求解.10 一棵深度为6的满二叉树有 _1_ 个分支结点和_2_个叶子。11 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是_散列表法_.12 有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的_出度_。三、解答题(每小题8分,共40分)1。 用
7、普里姆(prim)算法从右图中的顶点1开始逐步构造最小生成树,要求画出构造的每一步。答:假设N=(V,E)是一个具有n个顶点的连通网,T=(U,TE)是所求的最小生成树,其中U是T的顶点集,TE是T的边集。(1)初始U=u0(u0V),TE=;(2)在所有uU, vV-U的边中选一条代价最小的边(u0,v0)并入集合TE,同时将v0并入U;(3)重复(2),直到U=V为止。此时,TE中必含有n1条边,则T=(V,TE)为N的最小生成树。2。 假设通信电文使用的字符集为a,b,c,d,e,f,g,若这些字符在电文中出现的频度分别为:3,35,13,15,20,5和9,分别求出这些字符的等长编码以
8、及哈夫曼编码,并比较他们的编码长度。3. 待排序的序列为:25,47,36,21,90,84,62,78,15,32.写出用(小根)堆排序的每一趟的结果。int main(int argc, char *argv) int array10 = 24, 17, 85, 13, 9, 54, 76, 45, 5, 63;int num = sizeof(array)/sizeof(int);for(int i = 0; i num-1; i+) for(int j = 0; j num - 1 i; j+) if(arrayj arrayj+1) int tmp = arrayj;arrayj =
9、 arrayj+1;arrayj+1 = tmp;for(int i = 0; i num; i+) printf(”%d, arrayi);if(i = num-1) printf(”n);4. 已知一棵树的前序序列为:abefcgdhijk,后序序列为:efbgcijkhda。画出这棵树.答:前序序列为:abefcgdhijk,后序序列为:efbgcijkhda a b c d e f g h z j k 5。 已知闭散列表的长度为10(散列地址空间为0。.9),散列函数为H(K)=K8,采用线性重新散列技术解决冲突,将下列一组数据25,17,39,47,83,55,99,34依次插入到散
10、列表中,请画出散列表。答:(1) H(25) = 1(2) H(16) = 0(3) H(38) = 6(4) H(47) = 7(5) H(79) = 7 与 (4)冲突,于是线性重新散列即查找7后面的空槽,此时8为空,因此将79放入8(第九个位置)中(6) H(82) = 2(7) H(51) = 3(8) H(39) = 7 与(4)冲突,于是线性重新散列即查找7后面的空槽,此时8已经有元素(5),9为空,因此将39放入9(第十个位置)中,所以最终闭散列表的存储情况如下所示:位置:(0)(1)(2)(3)(4)(5)(6) (7)(8)(9) 值: 16 25 82 51 空 空 38
11、47 79 39。四、算法阅读、设计(共5分)1 阅读下列函数algo,并回答问题:(5分)void algo(Queue *Q) Stack S; InitStack(&S); while (!QueueEmpty(Q) Push(&S, DeQueue(Q)); while (! StackEmpty(&S) nQueue(Q,Pop(&S);(1)假设队列q中的元素为(2,4,5,7,8),其中“2”为队头元素.写出执行函数调用algo(q)后的队列q;(2)简述算法algo的功能。答: (1)87542 (2)队列倒置五、程序设计题(共10分)1、已知r为一维数组,其中r0到rn1为待排序的n个元素,排序好的元素仍放在r0到rn-1中,请写出对该数组进行非递归的直接插入排序算法,取名为insertsort(elemtype r,int n). (10分) 第 6 页 共 6 页 福建师范大学试卷纸