《大工16春《数据结构》开卷考试复习资料.pdf》由会员分享,可在线阅读,更多相关《大工16春《数据结构》开卷考试复习资料.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、机密启用前大连理工大学网络教育学院大连理工大学网络教育学院20162016 年年 9 9 月数据结构课程月数据结构课程期末复习资料期末复习资料 注意事项:本复习题满分共:400 分。一、单项选择题(本大题共一、单项选择题(本大题共 6565 小题,每小题小题,每小题 3 3 分,共分,共 195195 分)分)1对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为()。(A).正确性 (B). 可行性 (C). 健壮性 (D). 输入性2设 S 为 C 语言的语句,计算机执行下面算法时,算法的时间复杂度为()。for(i=n-1;i=0;i-) for(j=0;ji;j+) S;
2、(A).n (B). O(nlgn) (C). O(n) (D). O(n)3折半查找法适用于()。(A)、有序顺序表(B)、有序单链表(C)、有序顺序表和有序单链表都可以(D)、无限制4顺序存储结构的优势是()。(A)、利于插入操作(B)、利于删除操作(C)、利于顺序访问(D)、利于随机访问5深度为 k 的完全二叉树,其叶子结点必在第()层上。(A)、k-1(B)、k(C)、k-1 和 k(D)、1 至 k6具有 60 个结点的二叉树,其叶子结点有12 个,则度为 1 的结点数为()(A)、11(B)、13(C)、48(D)、377.下列程序段的时间复杂度为()。for(i=0; im; i
3、+) for(j=0; jt; j+) cij=0;for(i=0 ;im ;i+)for(j=0 ;jt ;j+)for(k=0 ;kright=s; s-left=p; p-right-left=s; s-right=p-right;(B) s-left=p;s-right=p-right;p-right=s; p-right-left=s; (C) p-right=s; p-right-left=s; s-left=p; s-right=p-right; (D) s-left=p;s-right=p-right;p-right-left=s; p-right=s;12图的 Depth-F
4、irst Search(DFS)遍历思想实际上是二叉树()遍历方法的推广。22(A)、先序(B)、中序(C)、后序(D)、层序13在上图列链队列 Q 中,元素 a 出队的操作序列为()(A)、p=next; p-next= next;(B)、p=next; next=p-next;(C)、p=next; p-next= next;(D)、p=Q-next; Q-next=p-next;14 Huffman 树的带权路径长度 WPL 等于()(A)、除根结点之外的所有结点权值之和(B)、所有结点权值之和(C)、各叶子结点的带权路径长度之和(D)、根结点的值15线索二叉链表是利用()域存储后继结点
5、的地址。(A)、lchild(B)、data(C)、rchild(D)、root16组成数据的基本单位是()。(A) 数据项 (B) 数据类型,则数据结构 A 是()。(A) 线性结构 (B) 树型结构 (C) 图型结构 (D) 集合18数组的逻辑结构不同于下列()的逻辑结构。(A) 线性表 (B) 栈 (C) 队列19二叉树中第 i(i1)层上的结点数最多有()个。ii+1i-1A2 B2 C220.对一个算法的评价,不包括如下()方面的内容。 A健壮性和可读性 B并行性 C正确性 D时空复杂度21.在带有头结点的单链表HL 中, 要向表头插入一个由指针p 指向的结点, 则执行( )。 A.
6、 p-next=HL-next; HL-next=p; B. p-next=HL; HL=p; C. p-next=HL; p=HL; D. HL=p; p-next=HL;22.对线性表,在下列哪种情况下应当采用链表表示?( ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变23.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3224下列各种排序算法中平均时间复杂度为O(n )是()。(A) 快速排序(B) 堆排序(C)
7、归并排序(D) 冒泡排序25设输入序列 1、2、3、n 经过栈作用后,输出序列中的第一个元素是 n,则输出序列中的第 i 个输出元素是()。(A) n-i(B) n-1-i(C) n+l -i(D) 不能确定26设散列表中有 m 个存储单元,散列函数 H(key)= key % p,则 p 最好选择()。(A) 小于等于 m 的最大奇数(B) 小于等于 m 的最大素数(C) 小于等于 m 的最大偶数(D) 小于等于 m 的最大合数27设在一棵度数为3 的树中,度数为 3 的结点数有 2 个,度数为2 的结点数有 1 个,度数为 1 的结点数有 2 个,那么度数为 0 的结点数有()个。(A)
8、4(B) 5(C) 6(D) 728设完全无向图中有 n 个顶点,则该完全无向图中有()条边。 (D) 树 D2i+2 (C) 数据元素 (D) 数据变量17设数据结构 A=(D,R),其中 D=1,2,3,4,R=r,r=,(A) n(n-1)/2(B) n(n-1)(C) n(n+1)/2(D) (n-1)/229AOV 网是一种()。A有向图 B无向图 C无向无环图 D有向无环图30采用开放定址法处理散列表的冲突时,其平均查找长度()。A低于链接法处理冲突 B.高于链接法处理冲突 C与链接法处理冲突相同 D高于二分查找31若需要利用形参直接访问实参时,应将形参变量说明为()参数。A值 B
9、函数 C指针 D引用32在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。A行号 B列号 C元素值 D非零元素个数33快速排序在最坏情况下的时间复杂度为()。AO(log2n) BO(nlog2n) C0(n) D0(n2)34从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A. O(n) B. O(1) C. O(log2n) D. O(n2)35设指针变量 p 指向单链表结点 A,则删除结点 A 的后继结点 B 需要的操作为()。(A) p-next=p-next-next (B) p=p-next(C) p=p-next-next (D) p-next=
10、p36设栈 S 和队列 Q 的初始状态为空,元素E1、E2、E3、E4、E5 和 E6 依次通过栈 S,一个元素出栈后即进入队列 Q,若 6 个元素出列的顺序为 E2、E4、E3、E6、E5 和 E1,则栈 S 的容量至少应该是()。(A) 6 (B) 4 (C) 3 (D) 237将 10 阶对称矩阵压缩存储到一维数组A 中,则数组 A 的长度最少为()。(A) 100 (B) 40 (C) 55 (D) 8038设结点 A 有 3 个兄弟结点且结点 B 为结点 A 的双亲结点,则结点 B 的度数数为()。(A) 3 (B) 4 (C) 5 (D) 139根据二叉树的定义,可知具有3 个结点
11、的二叉树共有()种不同的形态。(A) 4 (B) 5 (C) 6 (D) 740. 设有以下四种排序方法,则()的空间复杂度最大。(A) 冒泡排序 (B) 快速排序 (C) 堆排序 (D) 希尔排序41设某无向图有 n 个顶点,则该无向图的邻接表中有()个顶点头结点。(A) 2n(B) n(C) n/2(D) n(n-1)42设无向图 G 中有 n 个顶点,则该无向图的最小生成树上有()条边。(A) n(B) n-1(C) 2n(D) 2n-143设一组初始记录关键字序列为(60,80,55,40,42,85),则以第一个关键字 60 为基准而得到的一趟快速排序结果是()。(A) 40,42,
12、60,55,80,85(B) 42,45,55,60,85,80(C) 42,40,55,60,80,85(D) 42,40,60,85,55,8044()二叉排序树可以得到一个从小到大的有序序列。(A) 先序遍历(B) 中序遍历(C) 后序遍历(D) 层次遍历45设按照从上到下、从左到右的顺序从 1 开始对完全二叉树进行顺序编号,则编号为 i结点的左孩子结点的编号为()。(A) 2i+1(B) 2i(C) i/2(D) 2i-146程序段 s=i=0;do i=i+1; s=s+i;while(inext=0(C) head-next=head(D) head!=048设某棵二叉树的高度为1
13、0,则该二叉树上叶子结点最多有()。(A) 20(B) 256(C) 512(D) 102449设一组初始记录关键字序列为(13,18,24,35,47,50,62,83,90,115,134),则利用二分法查找关键字 90 需要比较的关键字个数为()。(A) 1(B) 2(C) 3(D) 450设指针变量 top 指向当前链式栈的栈顶,则删除栈顶元素的操作序列为()。(A) top=top+1;(B) top=top-1;(C) top-next=top;(D) top=top-next;51栈和队列的共同特点是( )。A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有
14、共同点52用链接方式存储的队列,在进行插入运算时( ).A. 仅修改头指针 B. 头、尾指针都要修改C. 仅修改尾指针 D.头、尾指针可能都要修改53以下数据结构中哪一个是非线性结构?( )A. 队列 B. 栈 C. 线性表 D. 二叉树54设有一个二维数组 Amn,假设 A00存放位置在 644(10),A22存放位置在676(10), 每个元素占一个空间, 问 A33存放在什么位置?脚注(10)表示用 10 进制表示。A688 B678 C692 D69655树最适合用来表示( )。A.有序数据元素 B.无序数据元素C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据56设顺序表的
15、长度为 n,则顺序查找的平均比较次数为()。(A) n(B) n/2(C) (n+1)/2(D) (n-1)/257设有序表中的元素为(13,18,24,35,47,50,62),则在其中利用二分法查找值为24 的元素需要经过()次比较。(A) 1(B) 2(C) 3(D) 458设顺序线性表的长度为 30,分成 5 块,每块 6 个元素,如果采用分块查找,则其平均查找长度为()。(A) 6(B) 11(C) 5(D)59设有向无环图 G 中的有向边集合 E=,则下列属于该有向图 G 的一种拓扑排序序列的是()。(A) 1,2,3,4(B) 2,3,4,1(C) 1,4,2,3(D) 1,2,
16、4,360设有一组初始记录关键字序列为(34,76,45,18,26,54,92),则由这组记录关键字生成的二叉排序树的深度为()。(A) 4(B) 5(C) 6(D) 761二叉树的第 k 层的结点数最多为( ).A2 B. 2 C. 2D. 2分查找,则查找 A3的比较序列的下标依次为( )A. 1,2,3 B. 9,5,2,3kk-2k+1k-162若有 18 个元素的有序表存放在一维数组A19中,第一个元素放 A1中,现进行二C. 9,5,3 D. 9,4,2,363对 n 个记录的文件进行快速排序,所需要的辅助存储空间大致为A. O(1) B. O(n) C. O(1og2n) D.
17、 O(n2)64对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1 的元素有()个,A1 B2 C3 D465设有 6 个结点的无向图,该图至少应有( )条边才能确保是一个连通图。二、填空题(本大题共二、填空题(本大题共 4040 小题,每小题小题,每小题 2 2 分,共分,共 8080 分)分)1.设指针变量 p 指向双向链表中的结点A,指针变量 s 指向被插入的结点 X,则在结点A 的后面插入结点 X 的操作序列为_=p;s-right=p-right;p-right-left=s;_=s;(设结点中的两个指针域分
18、别为left 和 right)。2.设完全有向图中有n 个顶点, 则该完全有向图中共有_条有向条; 设完全无向图中有 n 个顶点,则该完全无向图中共有_条无向边。3.当用长度为 N 的数组顺序存储一个栈时,假定用top=N 表示栈空,则表示栈满的条件是_。4.对于一个长度为 n 的单链存储的线性表, 在表头插入元素的时间复杂度为_,在表尾插入元素的时间复杂度为_。5.设 W 为一个二维数组,其每个数据元素占用4 个字节,行下标 i 从 0 到 7 ,列下标 j从 0 到 3 , 则二维数组 W 的数据元素共占用_个字节。 W 中第 6 行的元素和第 4 列的元素共占用_个字节。若按行顺序存放二
19、维数组 W,其起始地址为 100,则二维数组元素 W63的起始地址为_。6.广义表 A= (a,(a,b),(a,b),c),则它的深度为 _,它的长度为_。7.二叉树是指度为 2 的_树。 一棵结点数为 N 的二叉树, 其所有结点的度的总和是_。8.设有一组初始关键字序列为(24,35,12,27,18,26),按照从小到大排序,则第3 趟直接插入排序结束后的结果的是_。9.设一棵二叉树的前序序列为ABC, 则有_种不同的二叉树可以得到这种序列。10.下面程序段的功能是实现一趟快速排序,请在下划线处填上正确的语句。struct record int key;datatype others;v
20、oid quickpass(struct record r, int s, int t, int &i) int j=t; struct record x=rs; i=s; while(ij) while (i j=j-1; if (ij) ri=rj;i=i+1; while (_) i=i+1; if (inext=_;2) p-next=s;3) t=p-data;4) p-data=_;5) s-data=t;12设某棵完全二叉树中有100 个结点,则该二叉树中有_个叶子结点。13设某顺序循环队列中有 m 个元素,且规定队头指针 F 指向队头元素的前一个位置, 队尾指针 R 指向队尾元
21、素的当前位置,则该循环队列中最多存储_队列元素。14.已知一双向链表如下(指针域名为 next 和 prior):现将 p 所指的结点插入到x和y结点之间,其中已知 q 指针指向 x 节点,其操作步骤为:_;_;_;_。15n 个结点无向完全图的的边数为_,n 个结点的生成树的边数为_。16已知一有向无环图如下:任意写出二种拓扑排序序列:_、_。17.已知二叉树的中序遍历序列为BCA, 后序遍历序列为 CBA, 则该二叉树的先序遍历序列为_,层序遍历序列为_。18设用于通信的电文仅由8 个字母组成,字母在电文中出现的频率分别为7、19、2、6、32、3、21、10,根据这些频率作为权值构造哈夫
22、曼树,则这棵哈夫曼树的高度为_。19设一组记录关键字序列为(80,70,33,65,24,56,48),则用筛选法建成的初始堆为(小根堆)_。20 设无向图 G (如右图所示) , 则其最小生成树上所有边的权值之和为_。21.逻辑结构决定了算法的_,而存储结构决定了算法的_。22.栈和队列都是一种_的线性表,栈的插入和删除只能在_进行。23.线性表(a1,a2,an)的顺序存储结构中,设每个单元的长度为 L,元素 a1的存储地址为 addr,元素 ai的存储地址 LOC(ai)为 _.24.队列的插入操作是在队列的_进行,删除操作是在队列的_进行。25设二叉树中度数为 0 的结点数为 50,度
23、数为 1 的结点数为 30,则该二叉树中总共有_个结点数。26 设 F 和 R 分别表示顺序循环队列的头指针和尾指针, 采用牺牲一个单元来区分队空和队满的方式下,则判断该循环队列为空的条件为_。27设二叉树中结点的两个指针域分别为lchild 和 rchild,则判断指针变量p 所指向的结点为叶子结点的条件是_。28简单选择排序和直接插入排序算法的平均时间复杂度为_。29快速排序算法的空间复杂度平均情况下为_,最坏的情况下为_。30.散列表中解决冲突的两种方法是_和_。31.数据结构是指数据及其相互之间的_。当结点之间存在M 对 N(M:N)的联系时,称这种结构为_。32.对一棵二叉搜索树进行
24、中序遍历时,得到的结点序列是一个_。对一棵由算术表达式组成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的_。33.对于一棵具有 n 个结点的二叉树, 用二叉链表存储时, 其指针总数为_个,其中_个用于指向孩子,_个指针是空闲的。34.若对一棵完全二叉树从 0 开始进行结点的编号,并按此编号把它顺序存储到一维数组A中, 即编号为0的结点存储到A0中。 其余类推, 则A i 元素的左孩子元素为_,右孩子元素为_,双亲元素为_。35.在线性表的散列存储中,处理冲突的常用方法有_和_两种。36.当待排序的记录数较大,排序码较随机且对稳定性不作要求时,宜采用_排序;当待排序的记录数较大,存储空间
25、允许且要求排序是稳定时,宜采用_排序。37._遍历二叉排序树中的结点可以得到一个递增的关键字序列 (填先序、中序或后序)。38.设查找表中有 100 个元素,如果用二分法查找方法查找数据元素 X,则最多需要比较_次就可以断定数据元素 X 是否在查找表中。39.不论是顺序存储结构的栈还是链式存储结构的栈,其入栈和出栈操作的时间复杂度均为_。40.设有 n 个结点的完全二叉树,如果按照从自上到下、从左到右从1 开始顺序编号,则第 i 个结点的双亲结点编号为_,右孩子结点的编号为_。三、算法题(本大题共三、算法题(本大题共 1313 小题,除第小题,除第 8 8 题题 5 5 分,其他每小题分,其他
26、每小题 1010 分,共分,共 125125 分)分)1.设计在顺序有序表中实现二分查找的算法。2.设计判断二叉树是否为二叉排序树的算法。3.在链式存储结构上设计直接插入排序算法4.设计在链式结构上实现简单选择排序算法。5.设计在顺序存储结构上实现求子串算法。6.编写算法, 将一个结点类型为 Lnode 的单链表按逆序链接, 即若原单链表中存储元素的次序为 a1,an-1,an,则逆序链接后变为, an,an-1,a1。void contrary (Lnode * & HL)7.设有一组初始记录关键字序列(K1,K2,Kn),要求设计一个算法能够在 O(n)的时间复杂度内将线性表划分成两部分,
27、其中左半部分的每个关键字均小于 Ki,右半部分的每个关键字均大于等于 Ki。8.设有两个集合 A 和集合 B,要求设计生成集合C=AB 的算法,其中集合A、B 和 C 用链式存储结构表示。9设计计算二叉树中所有结点值之和的算法。10.设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。11.设计在链式存储结构上交换二叉树中所有结点左右子树的算法。12.在链式存储结构上建立一棵二叉排序树。13.设计一个在链式存储结构上统计二叉树中结点个数的算法。答案:一、单项选择题(本大题共一、单项选择题(本大题共 6565
28、 小题,每小题小题,每小题 3 3 分,共分,共 195195 分)分)1、C2、D 3、A 4、D 5、C 6、D7、A8、A11、D12、A13、B14、C15、C16、C17、C18、D21、A 22、B 23、C24、D25、C26、B27、C28、A31、D 32、A 33、D 34、C35、A36、C37、C38、B41、B42、B43、C44、B45、B46、A47、C48、C51、A 52、D 53、D 54、C 55、C 56、C57、C58、D61、D 62、D 63、C 64、D 65、A二、填空题(本大题共二、填空题(本大题共 4040 小题,每小题小题,每小题 2 2
29、 分,共分,共 8080 分)分)1. s-left=p,p-right2. n(n-1),n(n-1)/23. top=04. O(1) O(n)5. 128 44 1086. 3 37.有序 n-18. (12,24,35,27,18,26)9. 510. ij & ri.keynext,s-data12. 5013. m14. p-next=q-next;q-next-prior=p; q-next=p;p-prior=q;15. n(n-1)/2、n-116. ADCBFEG、ABCDEFFG17. ABC、ABC18. 619. (24,65,33,80,70,56,48)20. 8
30、21.设计、实现22.特殊、栈顶23. addr+(i-1)xL24.尾首9、A10、C19、C20、B29、D 30、B39、B40、B49、B50、D59、A60、A25.26.27.28.29.30.31.32.33. 129 F=R p-lchild=NULL&p-rchild=NULL O(n2) O(nlog2n), O(n)开放定址法,链地址法联系图(或图结构)有序序列后缀表达式(或逆波兰式) 2n n-1 n+134. A2i+1 A2i+2 Ai-1/235.36.37.38.39.开放定址法链接法快速归并中序 7 O(1)40.i/2,2i+1三、算法题(本大题共三、算法题
31、(本大题共 1313 小题,除第小题,除第 8 8 题题 5 5 分,其他每小题分,其他每小题 1010 分,共分,共 125125 分)分)1.设计在顺序有序表中实现二分查找的算法。struct record int key; int others;int bisearch(struct record r , int k) int low=0,mid,high=n-1; while(lowk)high=mid-1;elselow=mid+1; return(0);2.设计判断二叉树是否为二叉排序树的算法。int minnum=-32768,flag=1;typedef struct node
32、int key; struct node *lchild,*rchild;bitree;void inorder(bitree *bt) if(bt!=0)inorder(bt-lchild);if(minnumbt-key)flag=0;minnum=bt-key;inorder(bt-rchild);3.在链式存储结构上设计直接插入排序算法void straightinsertsort(lklist *&head) lklist *s,*p,*q; int t; if (head=0 | head-next=0) return; else for(q=head,p=head-next;p!
33、=0;p=q-next) for(s=head;s!=q-next;s=s-next) if (s-datap-data) break; if(s=q-next)q=p;elseq-next=p-next;p-next=s-next;s-next=p;t=p-data;p-data=s-data;s-data=t; 4.设计在链式结构上实现简单选择排序算法。void simpleselectsorlklist(lklist *&head) lklist *p,*q,*s; int min,t; if(head=0 |head-next=0) return; for(q=head; q!=0;q
34、=q-next) min=q-data; s=q; for(p=q-next; p!=0;p=p-next) if(minp-data)min=p-data; s=p; if(s!=q)t=s-data; s-data=q-data; q-data=t; 5.设计在顺序存储结构上实现求子串算法。void substring(char s , long start, long count, char t ) long i,j,length=strlen(s); if (startlength) printf(The copy position is wrong); else if (start+
35、count-1length) printf(Too characters to be copied);else for(i=start-1,j=0; istart+count-1;i+,j+) tj=si; tj= 0;6.编写算法, 将一个结点类型为 Lnode 的单链表按逆序链接, 即若原单链表中存储元素的次序为 a1,an-1,an,则逆序链接后变为, an,an-1,a1。void contrary (Lnode * & HL)答案:void contrary (Lnode * & HL)Lnode *p=HL;HL=NULL;While (p!=null) Lnode*q=p;p=p
36、next; qnext=HL; HL=q; 7.设有一组初始记录关键字序列(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) for(q=hb;q!=0;q=q-next) if (q-data=p-d
37、ata) break;if(q!=0)t=(lklist*)malloc(sizeof(lklist); t-data=p-data;t-next=hc;hc=t;9设计计算二叉树中所有结点值之和的算法。答案:void sum(bitree *bt,int &s)if(bt!=0) s=s+bt-data; sum(bt-lchild,s);sum(bt-rchild,s);10.设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。typedef char datatype;typedef struct n
38、ode datatype data; struct node *next;lklist;void split(lklist *head,lklist *&ha,lklist *&hb,lklist *&hc) lklist *p; ha=0,hb=0,hc=0; for(p=head;p!=0;p=head) head=p-next; p-next=0; if (p-data=A & p-datanext=ha; ha=p; else if (p-data=0 & p-datanext=hb; hb=p; else p-next=hc;hc=p; 11.设计在链式存储结构上交换二叉树中所有结点
39、左右子树的算法。typedef struct node int data; struct node *lchild,*rchild; bitree;void swapbitree(bitree *bt) bitree *p; if(bt=0) return;swapbitree(bt-lchild); swapbitree(bt-rchild);p=bt-lchild; bt-lchild=bt-rchild; bt-rchild=p;12.在链式存储结构上建立一棵二叉排序树。#define n 10typedef struct nodeint key; struct node *lchild,*rchild;bitree;void bstinsert(bitree *&bt,int key) if(bt=0)bt=(bitree*)malloc(sizeof(bitree);bt-key=key;bt-lchild=bt-rchild=0; elseif(bt-keykey)bstinsert(bt-lchild,key);elsebstinsert(bt-rchild,key);void createbsttree(bitree *&bt) int i; for(i=1;ilchild,count); countnode(bt-rchild,count);
限制150内