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

10 篇文章 8 订阅
8 篇文章 17 订阅

Ctrl+F 查询题目答案😄

没查到想要的题目?

这里还有👉 中国大学MOOC-陈越、何钦铭-数据结构-2020春期末考试(1)

判断题


1-1 无向连通图边数一定大于顶点个数减1。

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

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

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

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

单选题


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

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

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

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

2-5 对于序列{ 49,38,65,97,76,13,27,50 },按由小到大进行排序,下面哪一个是初始步长为4的希尔排序法第一趟的结果?

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

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

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

2-9 给定散列表大小为17,散列函数为H(Key)=Key%17。采用平方探测法处理冲突:h​i​​(k)=(H(k)±i​2​​)%17将关键字序列{ 23, 22, 7, 26, 9, 6 }依次插入到散列表中。那么元素6存放在散列表中的位置是:

2-10 设栈S和队列Q的初始状态均为空,元素{1, 2, 3, 4, 5, 6, 7}依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是{2, 5, 6, 4, 7, 3, 1},则栈S的容量至少是: 

2-11 若数据元素序列{ 11,12,13,7,8,9,23,4,5 }是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是:

2-12 给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:

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

2-14 已知一棵二叉树的树形如下图所示,其后序序列为{ eacbdgf }。树中与结点a同层的结点是:

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

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

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

2-18 在图中自a点开始进行广度优先遍历算法可能得到的结果为:

2-19 使用迪杰斯特拉(Dijkstra)算法求下图中从顶点1到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是:

2-20 如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为:

2-21 将 {28, 15, 42, 18, 22, 5, 40} 逐个按顺序插入到初始为空的最小堆(小根堆)中。则该树的前序遍历结果为:

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

程序填空题


5-1 本函数的功能是从有N个元素的线性表A中查找第K小的元素。函数的初始调用为Qselect(A, K, 0, N-1)。请完成下列填空。

这题拿不到满分,有个空就不给了

ElementType Qselect( ElementType A[], int K, int Left, int Right )
{
    ElementType Pivot = A[Left];
    int L = Left, R = Right+1;
 
    while (1) {
        while ( A[++L] < Pivot ) ;
        
        while ( A[--R] > Pivot )       (4分);//填空处
 
        if ( L < R ) Swap( &A[L], &A[R] );
        else break;
    }
    Swap( &A[Left], &A[R] );
    if ( K < (L-Left) )
                                        (5分);//填空处,这里错了就不给了
    else if ( K > (L-Left) )
        
return Qselect(A, K-R, R+1, Right)
;
    else
        return Pivot;
}


5-2 下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rear和Queue_front分别返回当前队列Q中队尾和队首元素的位置。

typedef struct TreeNode *BinTree;
struct TreeNode
{
   int Key;
   BinTree  Left;
   BinTree  Right;
};
 
int Width( BinTree T )
{
   BinTree  p;
   Queue Q;
   int Last, temp_width, max_width;
 
   temp_width = max_width = 0;
   Q = CreateQueue(MaxElements);
   Last = Queue_rear(Q);
   if ( T == NULL) return 0;
   else {
      Enqueue(T, Q);
      while (!IsEmpty(Q)) {
         p = Front_Dequeue(Q); 
         
         temp_width++           (3分);   //填空处
         if ( p->Left != NULL )  Enqueue(p->Left, Q);
        if ( p->Right != NULL )  Enqueue(p->Right, Q)      (3分);  //填空处
         if ( Queue_front(Q) > Last ) {
            Last = Queue_rear(Q);
            if ( temp_width > max_width ) max_width = temp_width;
            
               temp_width=0    (3分);  //填空处
         } /* end-if */
      } /* end-while */
      return  max_width;
   } /* end-else */
}

编程题


7-1 根据后序和中序遍历输出先序遍历 (8分)

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

输入格式:

第一行给出正整数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
//本题来源网络!    ! 注意编译器是C++(g++)
#include<bits/stdc++.h>
using namespace std;
 
int mid[33],post[33];
 
typedef int Status;
//树的储存结构定义
typedef struct BiTNode{
   int data;//结点的值
   struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
 
BiTree Creat(int *mid,int *post,int n){//根据后序和中序求出树
   if(n<1)return NULL;//如果输入出错
 
   int *p = mid;//寻找中序中的根结点
 
   while(p){
   if(*p== *(post+n-1))
   break;
   p++;
   }//p为中序中第一个根结点
 
   BiTree T =(BiTree)malloc(sizeof(BiTNode));//开辟空间
 
   T->data=*p;//p为第一个根结点
   int len = p-mid;
   //递归
   T->lchild= Creat(mid,post,len);
   T->rchild = Creat(p+1,post+len,n-len-1);
   return T;
 
 
 
}
 
void Print(BiTree T){
if(T){
   cout<<" "<<T->data;
   Print(T->lchild);
   Print(T->rchild);
 
}
return;
 
 
}
 
int main(){
   int n;
   BiTree T;
   cin>>n;
   //输入两个储存后序和中序的数组
   for(int i=0;i<n;i++){
       cin>>post[i];
   }
   for(int j=0 ;j < n;j++){
       cin>>mid[j];
   }
   T = Creat(mid,post,n);
   //将树前序输出
   cout<<"Preorder:";
   Print(T);
 
 
}

没查到想要的题目?

这里还有👉 中国大学MOOC-陈越、何钦铭-数据结构-2020春期末考试(1)


帅哥美女总会随手点赞👍👍👍
帅哥美女总会随手点赞👍👍👍
帅哥美女总会随手点赞👍👍👍

  • 18
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值