2022年数据结构试卷及答案 .pdf
数据结构试卷(二)一、选择题(24 分)1下面关于线性表的叙述错误的是()。(A)线性表采用顺序存储必须占用一片连续的存储空间(B)线性表采用链式存储不必占用一片连续的存储空间(C)线性表采用链式存储便于插入和删除操作的实现(D)线性表采用顺序存储便于插入和删除操作的实现2设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有()个空指针域。(A)2m-1(B)2m(C)2m+1(D)4m 3设顺序循环队列Q0:M-1 的头指针和尾指针分别为F 和 R,头指针 F 总是指向队头元素的前一位置,尾指针R 总是指向队尾元素的当前位置,则该循环队列中的元素个数为()。(A)R-F(B)F-R(C)(R-F+M)M(D)(F-R+M)M 4设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为()。(A)BADC(B)BCDA(C)CDAB(D)CBDA 5设某完全无向图中有n 个顶点,则该完全无向图中有()条边。(A)n(n-1)/2(B)n(n-1)(C)n2(D)n2-1 6设某棵二叉树中有2000 个结点,则该二叉树的最小高度为()。(A)9(B)10(C)11(D)12 7设某有向图中有n 个顶点,则该有向图对应的邻接表中有()个表头结点。(A)n-1(B)n(C)n+1(D)2n-1 8设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5 为基准进行一趟快速排序的结果为()。(A)2,3,5,8,6(B)3,2,5,8,6(C)3,2,5,6,8(D)2,3,6,5,8 二、填空题(24 分)1.为了能有效地应用HASH查找技术,必须解决的两个问题是_ 和_。2.下面程序段的功能实现数据x 进栈,要求在下划线处填上正确的语句。typedef struct int s100;int top;sqstack;void push(sqstack&stack,int x)if(stack.top=m-1)printf(“overflow”);else _;_;3.中序遍历二叉排序树所得到的序列是_序列(填有序或无序)。4.快速排序的最坏时间复杂度为_,平均时间复杂度为_。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 4 页 -5.设某棵二叉树中度数为0 的结点数为N0,度数为 1 的结点数为N1,则该二叉树中度数为2 的结点数为 _;若采用二叉链表作为该二叉树的存储结构,则该二叉树中共有_个空指针域。6.设某无向图中顶点数和边数分别为n 和 e,所有顶点的度数之和为d,则 e=_。7.设一组初始记录关键字序列为(55,63,44,38,75,80,31,56),则利用筛选法建立的初始堆为 _。8.设某无向图G的邻接表为31241314234321vvvv,则从顶点V1开始的深度优先遍历序列为_;广度优先遍历序列为_。三、应用题(36 分)1 设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4 趟简单选择排序和第4 趟直接插入排序后的结果。2 设指针变量p 指向双向链表中结点A,指针变量 q 指向被插入结点B,要求给出在结点A的后面插入结点B的操作序列(设双向链表中结点的两个指针域分别为llink和 rlink)。3 设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62 时的比较次数并计算出查找成功时的平均查找长度。4 设一棵树T中边的集合为(A,B),(A,C),(A,D),(B,E),(C,F),(C,G),要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树。5 设有无向图G(如右图所示),要求给出用普里姆算法构造最小生成树所走过的边的集合。6 设有一组初始记录关键字为(45,80,48,40,22,78),要求构造一棵二叉排序树并给出构造过程。四、算法设计题(16 分)1 设有一组初始记录关键字序列(K1,K2,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。2 设有两个集合A和集合 B,要求设计生成集合C=A B的算法,其中集合A、B和 C用链式存储结构表示。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 4 页 -数据结构试卷(二)参考答案一、选择题1.D 2.B 3.C 4.A 5.A 6.C 7.B 8.C 二、填空题1.构造一个好的HASH 函数,确定解决冲突的方法2.stack.top+,stack.sstack.top=x 3.有序4.O(n2),O(nlog2n)5.N0-1,2N0+N16.d/2 7.(31,38,54,56,75,80,55,63)8.(1,3,4,2),(1,3,2,4)三、应用题1.(22,40,45,48,80,78),(40,45,48,80,22,78)2.q-llink=p;q-rlink=p-rlink;p-rlink-llink=q;p-rlink=q;3.2,ASL=91*1+2*2+3*4+4*2)=25/9 4.树的链式存储结构略,二叉树略5.E=(1,3),(1,2),(3,5),(5,6),(6,4)6.略四、算法设计题1.设有一组初始记录关键字序列(K1,K2,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。void quickpass(int r,int s,int t)int i=s,j=t,x=rs;while(ij)while(ix)j=j-1;if(ij)ri=rj;i=i+1;while(ij&rix)i=i+1;if(inext)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 4 页 -for(q=hb;q!=0;q=q-next)if(q-data=p-data)break;if(q!=0)t=(lklist*)malloc(sizeof(lklist);t-data=p-data;t-next=hc;hc=t;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 4 页 -