中国大学MOOC-陈越、何钦铭-数据结构-2019秋期末考试


【PTA】中国大学MOOC-陈越、何钦铭-数据结构-2019秋期末考试


无详细解析版本
对不住啦兄弟萌,因为时间关系我先把我的考题总的发出来,总结和解析之后会更新哒~

一、判断题:

1-1
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。 【F】

1-2
2N​ 和 NN​ 具有相同的增长速度。 【F】

1-3
若一棵平衡二叉树的所有非叶结点的平衡因子都是0,则其必为完美二叉树【T】

1-4
在任一有向图中,所有顶点的入度之和等于所有顶点的出度之和。 【T】

1-5
采用平方探测冲突解决策略(h​i​​ (k)=(H(k)+i​2 )%11, 注意:不是±i​2​​ ),将一批散列值均等于2的对象连续插入一个大小为11的散列表中,那么第4个对象一定位于下标为0的位置。 【T】

二、选择题:

2-1
试利用Floyed算法,求下图所示有向图的各对顶点之间的最短路径。下列选项哪个给出了正确的最短路径长度矩阵和最短路径矩阵?
在这里插入图片描述
2-2
对一组数据{ 2,12,16,88,5,10 }进行排序,若前三趟排序结果如下: 第一趟排序结果:2,12,16,5,10,88 第二趟排序结果:2,12,5,10,16,88 第三趟排序结果:2,5,10,12,16,88 则采用的排序方法可能是:

A. 冒泡排序
B. 希尔排序
C. 归并排序
D. 基数排序

答案:【A】

在这里插入图片描述
2-13
数据结构中Dijkstra算法用来解决哪个问题?

A. 关键路径
B. 最短路径
C. 拓扑排序
D. 字符串匹配
答案:【B】

在这里插入图片描述

2-17
给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用线性探测解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)

A. 1, 3, 3, 9, 4, 9, 9
B. 1, 3, 4, 9, 7, 5, -1
C. 1, 3, 4, 9, 5, 0, 8
D. 1, 3, 4, 9, 5, 0, 2
答案:【D】

在这里插入图片描述

三、程序填空题:

5-1
下列代码的功能是将一列元素{ r[1] … r[n] }按其键值 key 的非递减顺序排序。普通选择排序是每次仅将一个待排序列的最小元放到正确的位置上,而这个另类的选择排序是每次从待排序列中同时找到最小元和最大元,把它们放到最终的正确位置上。

j<=n-i+1
r[j]->key < r[mini]->key
mini!=i
maxi==i
在这里插入图片描述
5-2
本函数的功能是从有N个元素的线性表A中查找第K小的元素。其中函数BuildMaxHeap(H, K)是将元素H[1] … H[K]调整为一个最大堆。请完成下列填空。

H[child+1]>H[child]
r[j]->key < H[child]>H[0]
在这里插入图片描述

四、编程题:

本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。

输入格式:

第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。

输出格式:

在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

Preorder: 4 1 3 2 6 5 7

代码如下:

#include <bits/stdc++.h>
using namespace std;  

void Preorder(int *postorder, int *inorder, int n){  
    if(n <= 0) return;  
    int root = postorder[n - 1];  
    int i;  
    for(i = 0; i < n; i++) {  
        if(inorder[i] == root) {  
            break;  
        }  
    }  
    cout << ' ' << root;  
    Preorder(postorder, inorder, i);  
    Preorder(postorder + i, inorder + i + 1, n - i - 1);  
}  
int main() {  
    int postorder[31], inorder[31], n;   
    cin >> n;    
    int i, j; 
    for(i = 0; i < n; i++) {  
        scanf("%d", &postorder[i]);  
    }  
    for(i = 0; i < n; i++) {  
        scanf("%d", &inorder[i]);  
    }  
    cout << "Preorder:" ;  
    Preorder(postorder, inorder, n);   
    return 0;  
} 

发布了12 篇原创文章 · 获赞 24 · 访问量 2610

猜你喜欢

转载自blog.csdn.net/qq_43974000/article/details/103601027
今日推荐