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

判断题:

1-1若一棵平衡二叉树的所有非叶结点的平衡因子都是0,则其必为完美二叉树。(2分)

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

1-3n!是O(n​n)的。 (2分)

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

1-5在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍。 (2分)


参考答案:TTTFT

选择题:

2-1给出关键字序列{ 4321, 56, 57, 46, 28, 7, 331, 33, 234, 63 },下面哪个选择是按次位优先(LSD)链式基数排序进行了一趟分配和收集的结果? (2分)

A:→56→28→4321→331→33→234→46→57→63→7
B:→4321→331→33→63→234→56→46→57→7→28
C:→331→4321→33→63→234→56→46→57→7→28
D:→57→46→28→7→33→234→63→56→4321→331

2-2将 8, 9, 7, 2, 3, 5, 6, 4 顺序插入一棵初始为空的AVL树。下列句子中哪句是错的? (4分)

A:4 和 6 是兄弟
B:7 是根结点
C:5 是 8 的父结点
D:3 和 8 是兄弟

2-3在一个有权无向图中,如果顶点b到顶点a的最短路径长度是10,顶点c与顶点b之间存在一条长度为3的边。那么下列说法中有几句是正确的? (4分)

c与a的最短路径长度就是13
c与a的最短路径长度就是7
c与a的最短路径长度不超过13
c与a的最短路径不小于7

A:3句
B:1句
C:2句
D:4句

2-4在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( )。 (2分)

A:s->next=rear;rear=s
B:rear->next=s;rear=s;
C:front=front->next
D:s->next=front;front=s;

2-5在拓扑排序算法中用堆栈和用队列产生的结果会不同吗?(2分)

A:肯定是相同的
B:有可能会不同
C:是的肯定不同
D:以上全不对

2-6给定二叉树如下图所示。设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。若遍历后的结点序列为3、1、7、5、6、2、4,则其遍历方式是: (2分)
在这里插入图片描述

A:RLN
B:RNL
C:LRN
D:NRL

2-7给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:(2分)
在这里插入图片描述

A:V1,V5,V6,V4,V7,V2,V3
B:V1,V2,V3,V4,V7,V6,V5
C:V1,V5,V4,V7,V6,V2,V3
D:V1,V5,V4,V7,V6,V3,V2

2-8已知一个图的邻接矩阵如下,则从顶点V1出发按广度优先搜索法进行遍历,可能得到的一种顶点序列为: (2分)
在这里插入图片描述

A:V1,V3,V5,V2,V4,V6
B:V1,V3,V5,V6,V4,V2
C:V1,V2,V4,V5,V6,V3
D:V1,V2,V3,V5,V4,V6

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

A:1, 3, 3, 9, 4, 9, 9
B:1, 3, 4, 9, 7, 5, -1
C:1, 3, 4, 9, 5, 0, 2
D:1, 3, 4, 9, 5, 0, 8

2-10设最小堆(小根堆)的层序遍历结果为{5, 18, 15, 28, 22, 42, 40}。用线性时间复杂度的算法将该堆调整为最大堆(大根堆),则该树的中序遍历结果为:(4分)

A:18, 28, 22, 15, 40, 5, 42
B:5, 22, 18, 42, 15, 40, 28
C:22, 5, 18, 42, 40, 15, 28
D:18, 28, 22, 42, 15, 40, 5

2-11给定初始待排序列{ 15,9,7,8,20,-1,4 }。如果希尔排序第一趟结束后得到序列为{ 15,-1,4,8,20,9,7 },则该趟增量为: (4分)

A:2
B:1
C:4
D:3

2-12要判断一个整数N(>10)是否素数,我们需要检查3到√​N之间是否存在奇数可以整除N。则这个算法的时间复杂度是:(2分)

A:O(√N)
B:O(N/2)
C:O(0.5logN)
D:O(√NlogN)

2-13给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:(4分)

在这里插入图片描述

A:24
B:18
C:17
D:23

2-14在并查集问题中,已知集合元素0~8所以对应的父结点编号值分别是{ 1, -4, 1, 1, -3, 4, 4, 8, -2 }(注:−n表示树根且对应集合大小为n),那么将元素6和8所在的集合合并(要求必须将小集合并到大集合)后,该集合对应的树根和父结点编号值分别是多少? (4分)

A:1和-6
B:8和-5
C:4和-5
D:8和-6

2-15数据结构中Dijkstra算法用来解决哪个问题? (2分)

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

2-16哈夫曼树是n个带权叶子结点构成的所有二叉树中()最小的二叉树。 (2分)

A:高度
B:权值
C:带权路径长度
D:度

2-17将10、12、1、14、6、5、8、15、3、9、7逐个按顺序插入到初始为空的最小堆(小根堆)中,然后连续执行两次删除最小元素操作(DeleteMin),此后堆顶的元素是什么? (4分)

A:7
B:6
C:9
D:5

2-18设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是: (2分)

A:2
B:3
C:1
D:4

2-19将1~6这6个键值插到一棵初始为空的二叉搜索树中。如果插入完成后,搜索树结构如图所示,问:可能的插入序列是什么? (2分)
在这里插入图片描述

A:4 1 2 3 5 6
B:4 1 3 2 5 6
C:4 1 3 2 6 5
D:1 2 3 4 5 6

2-20对一组数据{ 2,12,16,88,5,10 }进行排序,若前三趟排序结果如下: 第一趟排序结果:2,12,16,5,10,88 第二趟排序结果:2,12,5,10,16,88 第三趟排序结果:2,5,10,12,16,88 则采用的排序方法可能是: (2分)

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

2-21设数字 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 在大小为10的散列表中根据散列函数 h(X)=X%10得到的下标对应为 {1, 3, 4, 9, 5, 0, 2}。那么继续用散列函数 “h(X)=X%表长”实施再散列并用线性探测法解决冲突后,它们的下标变为:(4分)

A:1, 12, 17, 0, 13, 8, 14
B:1, 12, 9, 13, 20, 19, 11
C:11, 3, 13, 19, 4, 0, 9
D:1, 3, 4, 9, 5, 0, 2

2-22设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是? (4分)

A:4 5 1 3 2
B:4 3 1 2 5
C:3 2 1 5 4
D:5 1 2 3 4

参考答案:CCCDB BDDCD CADCA CDBAB AC

程序题:

5-1The function is to do topological sort on a graph G. TopNum[] starts counting from 1.

void Topsort( Graph G )
{
    
    
   Queue Q;
   Vertex V, W;
   NodePtr ptr;
   int counter = 0;

   Q = CreateEmptyQueue(NumVertex);
   for ( V=0; V<G->NumV; V++ )
      if ( Indegree[V] == 0 )
         Enqueue(V, Q);
   while ( !IsEmpty(Q) ){
    
    
      V = Dequeue( Q );
      TopNum[V] = ++counter;(4);
      for ( ptr=G->List[V]; ptr; ptr=ptr->Next) {
    
    
         W = ptr->Vertex;
         if ( --Indegree[W]  (5) == 0 )
            Enqueue(W, Q);
      }
   }
   if ( counter != NumVertex )
      printf("ERROR: Graph has a cycle.\n");
   DisposeQueue(Q);
}

5-2本函数的功能是从有N个元素的线性表A中查找第K小的元素。其中函数BuildMaxHeap(H, K)是将元素H[1] … H[K]调整为一个最大堆。请完成下列填空。

ElementType FindKthSmallest ( int A[], int N, int K )
{
    
       /* it is assumed that K<=N */
    ElementType *H;
    int i, next, child;

    H = (ElementType *)malloc((K+1)*sizeof(ElementType));
    for ( i=1; i<=K; i++ ) H[i] = A[i-1];
    BuildMaxHeap(H, K);

    for ( next=K; next<N; next++ ) {
    
    
        H[0] = A[next];
        if ( H[0] < H[1] ) {
    
    
            for ( i=1; i*2<=K; i=child ) {
    
    
                child = i*2;
                if ( child!=K && H[child+1]>H[child](4) ) child++;
                if ( H[child]>H[0](5) )
                    H[i] = H[child];
                else break;
            }
            H[i] = H[0];
        }
    }
    return H[1];
}

猜你喜欢

转载自blog.csdn.net/qq_35779286/article/details/90669869