数据结构模拟题及部分答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、设单向循环链表的头指针为head,类型为linklist,试设计一个将 单向循环链表置逆的算法。(10分) 2、设计一个求二叉树的深度的递归算法。(5分)
《数据结构》模拟题2参考答案 一、单项选择题
1 6 11 16 21 B B C C C 2 7 12 17 22 D D B C C 3 8 13 18 23 B A C D A 4 9 14 19 24 C B A C B 5 10 15 20 25 A A D D C
四、应用题
1、 设关键字序列为{56,36,24,85,47,30,53,91,62,78},请画出: (4分) (1) 由该序列创建得到的初始最小堆对应的完全二叉树; (2) 删除初始堆堆顶元素后调整得到的新最小堆对应的完全二叉 树。 2、依次输入集合{20,13,22,5,16,3,48,24}中的元素,得到一棵二叉排 序树,请画出该二叉排序树,并求在等概率下查找成功的平均查找长 度。(4分) 3、下面为一个图,分别画出用普里姆(Prim)算法和克鲁斯卡尔 (Kruscal)算法求得的最小生成树(6分)
源自文库
D.从源点到汇点的最短路径 20、若进栈序列为a,b,c,d,进栈过程中可以出栈,则不可能的一个 出栈序列是( ) A.c,d,b,a B.d,c,b,a C.a,b,c,d D.d,c,a,b 21、已知某二叉树的先序遍历序列为34521,中序遍历序列为54213,则 它的后序遍历序列为( ) A.54123 B.54312 C. 51243 D. 34521 22、已知*p结点是某双向链表的中间结点,要删除*p结点的直接后继结 点,其语句序列是( ) A. q=p-prior; p->prior=p->prior->prior; p->prior->next=p; free(q); B. q=p->next; p->next->prior=p; p->next=p->next->next; free(q); C. q=p->next; p->next=p->next->next; p->next->prior=p; free(q); D. q=p-prior; p->prior->next=p; p->prior=p->prior->prior; free(q); 23、已知*p结点是某双向链表的中间结点,要在*p结点之前插入*s结 点,其语句序列是( ) A.s->next=p;s->prior=p->prior;p->prior->next=s;p->prior=s; B.p->prior=s;s->next=p;s->prior=p->prior;p->prior->next=s; C.s->next=p->next;s->prior=p;p->next-prior=s;p->next=s; D.p->next=s;s->next=p->next;s->prior=p;p->next-prior=s; 24、由带权为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带 权路径长度为( ) A.23 B.44 C.46 D.35 25、已知一个图如下所示,则从顶点a出发按深度优先搜索遍历不能得 到的一 种顶点序列为( ) A.abdghfce B.abecfhgd C.abcdefgh D.acfhgebd
9 7 5 4 6 3 5 3 5 5 5 4 b c d e f g a
4、设哈希函数为H(key)=key%11,给定关键字序列为 {13,41,15,44,6,68,12, 25,38,64},请画出用链地址法处理冲突所得的哈希表,并求在等 概率下查找成功时的平均查找长度。(6分)
3、 算法设计题
2、 填空题
1、空串是指 (1) ,空格串是指 (2) 。 2、设有两个串p和q,求q在p中首次出现的位置的运算叫 (3) 。 3、一个广义表为((a, b), a, d, e, ((i, j), k)),则该广义表的长度 为 (4) ,表头为 (5) 。 4、三维数组R[c1..d1, c2..d2, c3..d3]共含有 (6) 个元素。 (c1<=d1, c2<=d2, c3<=d3) 5、线性表、栈和队列都是 (7) 结构,可以在线性表的 (8) 位 置插入和删除元素;对于栈只能在 (9) 插入和删除元素;对于 队列只能在 (10) 插入元素和在 (11) 删除元素。 6、在所有排序方法中,关键字比较的次数与记录的初始排列无关的 是 (12) 。 7、有一个有序表为(8,15,27,36,42,55,67,89,93),当折半查找值为36 的元素时,比较(13) 次后查找成功;查找值为67的元素时,比较 (14) 次后查找成功。 8、一个n阶对称矩阵,若采用压缩存储,其所需的存储容量为 (15) ;若采用非压缩存储,其所需的存储容量为 (16) 。 9、已知8个数据元素为(34,76,45,18,26,54,92,65),按照依次插入 结点的方法生成一棵二叉排序树,则数据元素26所在的层次数为 (17) 。 10、一棵深度为k的满二叉树的结点总数为(18) ,一棵深度为k的完全二 叉树的结点总数的最小值为 (19) ,最大值为 (20) 。 11、对线性表(25,84,47,21,15,27)进行排序(非递减有序),若采用快速 排序法,第一趟排序后元素序列变为 (21) ;若采用归并排序算 法,第一趟排序后元素序列变为 (22) ;若采用希尔排序算法,第 一趟排序(dk=3)后元素序列变为 (23) 。 12、数组A中,每个元素A的长度为3个字节,行下标i的范围从1到8,列下 标j的范围从1到10,从首地址SA开始连续存放在存储器内,该数组按行 存放时,元素A[5][8]的起始地址为 (24) ,元素A[8][5]的起始 地址为 (25) 。 三、阅读程序与填空 1、阅读下面程序,给出输出结果: (1) 。 void demonstrate( ) { strassign(s,‘THIS IS A BOOK’); replace(s,substring(s,3,7), ‘ESE ARE’);
void visit2(BTree T) { if(T) { visit2(T->lchild); printf(“%c”,T->data); visit2(T->rchild); } } 运行结果: (4) 。 void visit3(BTree T) { if(T) { visit3(T->lchild); printf(“%c”,T->data); visit3(T->rchild); } } 运行结果: (5) 。
concat(s,‘S’); printf(“%s”,s); }//demonstrate 2、设队列Q中的元素序列为:(1,3,5,7,9,2,4,6,8);调用下面算法 后,队列Q中的元素序列改为: (2) 。 void exp(Queue &Q) { Stack S;int d; initstack(S); while(!QueueEmpty(Q)) {DeQueue(Q,d);Push(S,d);} while(!StackEmpty(S)) {Pop(S,d);EnQueue(Q,d);} }//exp 3、下图为一棵二叉树,阅读下面三个程序,给出访问二叉树的结果。 void visit1(BTree T) { if(T) { printf(“%c”,T->data); visit1(T->lchild); visit1(T->rchild); } } 运行结果: (3) 。
A. O() B. O(n) C.O(log4 n) D.O(n2) 11、下列程序段的时间复杂度为( ) s=s0; for( i=1; i<=n; i++) for(j=n; j>=n-i; j- -) s=s+1; A.O(n) B.O(nlog2n) C.O(n2) D.O(n3/2) 12、判定一个循环队列Q(最多元素个数为m)为满队列的条件是 ( ) A.Q.front==Q.rear B. (Q.rear+1)%m==Q.front C.(Q.rear-1)%m==Q.front D. (Q.front+1)%m==Q.rear 13、判定一个栈S为空的条件是( ) A.S.top!=0 B.S.top!=S.length C.S.top==S.base D. S.top=S.length 14、已知广义表LS=(a,(b,c,d),e),则运用 GetHead(GetHead(GetTail(LS)))所 得结果为( ) A.b B. (b,c,d) C.(b,c) D.e 15、在一个长度为n的顺序表中向第i个元素(0<i≤ n+1)之前插入一个 新的 元素时,需向后移动的元素个数为( ) A.n-i B.n-i-1 C.i D.n-i+1 16、在一个具有n个顶点的无向图中,要连通全部顶点至少需要 ( )条边。 A.n B.n+1 C.n-1 D.n/2 17、以下不属于特殊矩阵的是( ) A.对称矩阵 B.上三角矩阵 C.稀疏矩阵 D.三对角矩阵 18、用顺序存储方法将完全二叉树中所有结点逐层存放在数组R[1..n] 中,结点R[5]若有左孩子,则左孩子是结点( ) A.R[n] B.R[9] C.R[11] D.R[10] 19、关键路径是AOE-网(即边表示活动的网)中( ) A.最长的回路 B.最短的回路 C.从源点到汇点的最长路径
《数据结构》模拟题
1、 单项选择题
1、在数据结构中,从逻辑上可把数据结构分成( ) A.动态结构和静态结构 B.线性结构和非线性结构 C.紧凑结构和非紧凑结构 D.内部结构和外部结构 2、线性表的顺序存储结构是一种( )的存储结构。 A.顺序存取 B.索引存取 C.散列存取 D.随 机存取 3、组成数据的基本单位是( ) A.数据项 B. 数据元素 C. 数据类型 D.数据 变量 4、线性表的链接实现有利于( )运算。 A. 查找 B.读表元 C.插入 D.定位 5、串的逻辑结构与( )的逻辑结构不同。 A.树 B.栈 C.队列 D. 线性表 6、串的长度是( ) A.串中不同字符的个数 B. 串中所含字符的 个数 C.串中所含字符的个数且字符个数大于0 D. 串中不同字母的 个数 7、下列不是数据的逻辑结构的是( ) A.线性结构 B.树型结构 C.图型结构 D. 物理结构 8、带头结点的单链表L为空的判定条件是( ) A.L->next==NULL B.L==NULL C.L->next==L D.L!=NULL 9、一个队列的入列序列是a,b,c,d,则队列的输出序列是 ( ) A.d,c,b,a B. a,b,c,d C.d,b,c,a D.c,b,d,a 10、下列程序段的时间复杂度为( ) j=0;sum=0; while(sum<n) { j++; sum=sum+j;}
2、 填空题
(1)不含任何字符的串 (2)仅含空格字符的串 (3)模式匹配 (4)5 (5)(a, b) (6)(d1-c1+1)(d2c2+1)(d3-c3+1) (7)线性 (8)任意 (9)栈顶 (10)队尾 (11)队头 (12)(简单)选择排 序 (13)4 (14)2 (15)n(n+1)/2 (16)n2 (17)3 (18)2k-1 (19)2k-1 (20)2k-1 (21)(15,21,25,47,84,27) (22)(25,84,21,47,15,27) (23)(21,15,27,25,84,47) (24)SA+141 (25)SA+222
《数据结构》模拟题2参考答案 一、单项选择题
1 6 11 16 21 B B C C C 2 7 12 17 22 D D B C C 3 8 13 18 23 B A C D A 4 9 14 19 24 C B A C B 5 10 15 20 25 A A D D C
四、应用题
1、 设关键字序列为{56,36,24,85,47,30,53,91,62,78},请画出: (4分) (1) 由该序列创建得到的初始最小堆对应的完全二叉树; (2) 删除初始堆堆顶元素后调整得到的新最小堆对应的完全二叉 树。 2、依次输入集合{20,13,22,5,16,3,48,24}中的元素,得到一棵二叉排 序树,请画出该二叉排序树,并求在等概率下查找成功的平均查找长 度。(4分) 3、下面为一个图,分别画出用普里姆(Prim)算法和克鲁斯卡尔 (Kruscal)算法求得的最小生成树(6分)
源自文库
D.从源点到汇点的最短路径 20、若进栈序列为a,b,c,d,进栈过程中可以出栈,则不可能的一个 出栈序列是( ) A.c,d,b,a B.d,c,b,a C.a,b,c,d D.d,c,a,b 21、已知某二叉树的先序遍历序列为34521,中序遍历序列为54213,则 它的后序遍历序列为( ) A.54123 B.54312 C. 51243 D. 34521 22、已知*p结点是某双向链表的中间结点,要删除*p结点的直接后继结 点,其语句序列是( ) A. q=p-prior; p->prior=p->prior->prior; p->prior->next=p; free(q); B. q=p->next; p->next->prior=p; p->next=p->next->next; free(q); C. q=p->next; p->next=p->next->next; p->next->prior=p; free(q); D. q=p-prior; p->prior->next=p; p->prior=p->prior->prior; free(q); 23、已知*p结点是某双向链表的中间结点,要在*p结点之前插入*s结 点,其语句序列是( ) A.s->next=p;s->prior=p->prior;p->prior->next=s;p->prior=s; B.p->prior=s;s->next=p;s->prior=p->prior;p->prior->next=s; C.s->next=p->next;s->prior=p;p->next-prior=s;p->next=s; D.p->next=s;s->next=p->next;s->prior=p;p->next-prior=s; 24、由带权为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带 权路径长度为( ) A.23 B.44 C.46 D.35 25、已知一个图如下所示,则从顶点a出发按深度优先搜索遍历不能得 到的一 种顶点序列为( ) A.abdghfce B.abecfhgd C.abcdefgh D.acfhgebd
9 7 5 4 6 3 5 3 5 5 5 4 b c d e f g a
4、设哈希函数为H(key)=key%11,给定关键字序列为 {13,41,15,44,6,68,12, 25,38,64},请画出用链地址法处理冲突所得的哈希表,并求在等 概率下查找成功时的平均查找长度。(6分)
3、 算法设计题
2、 填空题
1、空串是指 (1) ,空格串是指 (2) 。 2、设有两个串p和q,求q在p中首次出现的位置的运算叫 (3) 。 3、一个广义表为((a, b), a, d, e, ((i, j), k)),则该广义表的长度 为 (4) ,表头为 (5) 。 4、三维数组R[c1..d1, c2..d2, c3..d3]共含有 (6) 个元素。 (c1<=d1, c2<=d2, c3<=d3) 5、线性表、栈和队列都是 (7) 结构,可以在线性表的 (8) 位 置插入和删除元素;对于栈只能在 (9) 插入和删除元素;对于 队列只能在 (10) 插入元素和在 (11) 删除元素。 6、在所有排序方法中,关键字比较的次数与记录的初始排列无关的 是 (12) 。 7、有一个有序表为(8,15,27,36,42,55,67,89,93),当折半查找值为36 的元素时,比较(13) 次后查找成功;查找值为67的元素时,比较 (14) 次后查找成功。 8、一个n阶对称矩阵,若采用压缩存储,其所需的存储容量为 (15) ;若采用非压缩存储,其所需的存储容量为 (16) 。 9、已知8个数据元素为(34,76,45,18,26,54,92,65),按照依次插入 结点的方法生成一棵二叉排序树,则数据元素26所在的层次数为 (17) 。 10、一棵深度为k的满二叉树的结点总数为(18) ,一棵深度为k的完全二 叉树的结点总数的最小值为 (19) ,最大值为 (20) 。 11、对线性表(25,84,47,21,15,27)进行排序(非递减有序),若采用快速 排序法,第一趟排序后元素序列变为 (21) ;若采用归并排序算 法,第一趟排序后元素序列变为 (22) ;若采用希尔排序算法,第 一趟排序(dk=3)后元素序列变为 (23) 。 12、数组A中,每个元素A的长度为3个字节,行下标i的范围从1到8,列下 标j的范围从1到10,从首地址SA开始连续存放在存储器内,该数组按行 存放时,元素A[5][8]的起始地址为 (24) ,元素A[8][5]的起始 地址为 (25) 。 三、阅读程序与填空 1、阅读下面程序,给出输出结果: (1) 。 void demonstrate( ) { strassign(s,‘THIS IS A BOOK’); replace(s,substring(s,3,7), ‘ESE ARE’);
void visit2(BTree T) { if(T) { visit2(T->lchild); printf(“%c”,T->data); visit2(T->rchild); } } 运行结果: (4) 。 void visit3(BTree T) { if(T) { visit3(T->lchild); printf(“%c”,T->data); visit3(T->rchild); } } 运行结果: (5) 。
concat(s,‘S’); printf(“%s”,s); }//demonstrate 2、设队列Q中的元素序列为:(1,3,5,7,9,2,4,6,8);调用下面算法 后,队列Q中的元素序列改为: (2) 。 void exp(Queue &Q) { Stack S;int d; initstack(S); while(!QueueEmpty(Q)) {DeQueue(Q,d);Push(S,d);} while(!StackEmpty(S)) {Pop(S,d);EnQueue(Q,d);} }//exp 3、下图为一棵二叉树,阅读下面三个程序,给出访问二叉树的结果。 void visit1(BTree T) { if(T) { printf(“%c”,T->data); visit1(T->lchild); visit1(T->rchild); } } 运行结果: (3) 。
A. O() B. O(n) C.O(log4 n) D.O(n2) 11、下列程序段的时间复杂度为( ) s=s0; for( i=1; i<=n; i++) for(j=n; j>=n-i; j- -) s=s+1; A.O(n) B.O(nlog2n) C.O(n2) D.O(n3/2) 12、判定一个循环队列Q(最多元素个数为m)为满队列的条件是 ( ) A.Q.front==Q.rear B. (Q.rear+1)%m==Q.front C.(Q.rear-1)%m==Q.front D. (Q.front+1)%m==Q.rear 13、判定一个栈S为空的条件是( ) A.S.top!=0 B.S.top!=S.length C.S.top==S.base D. S.top=S.length 14、已知广义表LS=(a,(b,c,d),e),则运用 GetHead(GetHead(GetTail(LS)))所 得结果为( ) A.b B. (b,c,d) C.(b,c) D.e 15、在一个长度为n的顺序表中向第i个元素(0<i≤ n+1)之前插入一个 新的 元素时,需向后移动的元素个数为( ) A.n-i B.n-i-1 C.i D.n-i+1 16、在一个具有n个顶点的无向图中,要连通全部顶点至少需要 ( )条边。 A.n B.n+1 C.n-1 D.n/2 17、以下不属于特殊矩阵的是( ) A.对称矩阵 B.上三角矩阵 C.稀疏矩阵 D.三对角矩阵 18、用顺序存储方法将完全二叉树中所有结点逐层存放在数组R[1..n] 中,结点R[5]若有左孩子,则左孩子是结点( ) A.R[n] B.R[9] C.R[11] D.R[10] 19、关键路径是AOE-网(即边表示活动的网)中( ) A.最长的回路 B.最短的回路 C.从源点到汇点的最长路径
《数据结构》模拟题
1、 单项选择题
1、在数据结构中,从逻辑上可把数据结构分成( ) A.动态结构和静态结构 B.线性结构和非线性结构 C.紧凑结构和非紧凑结构 D.内部结构和外部结构 2、线性表的顺序存储结构是一种( )的存储结构。 A.顺序存取 B.索引存取 C.散列存取 D.随 机存取 3、组成数据的基本单位是( ) A.数据项 B. 数据元素 C. 数据类型 D.数据 变量 4、线性表的链接实现有利于( )运算。 A. 查找 B.读表元 C.插入 D.定位 5、串的逻辑结构与( )的逻辑结构不同。 A.树 B.栈 C.队列 D. 线性表 6、串的长度是( ) A.串中不同字符的个数 B. 串中所含字符的 个数 C.串中所含字符的个数且字符个数大于0 D. 串中不同字母的 个数 7、下列不是数据的逻辑结构的是( ) A.线性结构 B.树型结构 C.图型结构 D. 物理结构 8、带头结点的单链表L为空的判定条件是( ) A.L->next==NULL B.L==NULL C.L->next==L D.L!=NULL 9、一个队列的入列序列是a,b,c,d,则队列的输出序列是 ( ) A.d,c,b,a B. a,b,c,d C.d,b,c,a D.c,b,d,a 10、下列程序段的时间复杂度为( ) j=0;sum=0; while(sum<n) { j++; sum=sum+j;}
2、 填空题
(1)不含任何字符的串 (2)仅含空格字符的串 (3)模式匹配 (4)5 (5)(a, b) (6)(d1-c1+1)(d2c2+1)(d3-c3+1) (7)线性 (8)任意 (9)栈顶 (10)队尾 (11)队头 (12)(简单)选择排 序 (13)4 (14)2 (15)n(n+1)/2 (16)n2 (17)3 (18)2k-1 (19)2k-1 (20)2k-1 (21)(15,21,25,47,84,27) (22)(25,84,21,47,15,27) (23)(21,15,27,25,84,47) (24)SA+141 (25)SA+222