【西电-网信院】数据结构与算法分析2022期末考试

数据结构与算法分析2022网信院期末考试


题型:选择20(2*10)+判断10(1*10)+填空(2*10)+问题求解30(7+7+8+8)+算法设计(10*2)

一、选择题

  1. 数据的最小单位
  2. *q是*p的直接前驱,*q与*p之间插入*s执行的操作
  3. 线性表最常用的操作是在最后一个元素后插入或删除第一个元素,则采用什么储存方式
  4. 栈容量为4,进栈的序列为1、2、3、4、5、6,则可能的出栈序列为
  5. 大小为6的数组循环队列,rear和front的值为0和4,从当前队列添加2个元素再删除2个元素,rear和front的值为多少
  6. 下面哪个说法正确?串是由字符构成的有限序列;空串是由空格构成的串;朴素的模式匹配算法又称为KMP算法;串采用顺序存储结构
  7. 权8、4、5、7构成的Huffman树,则带权的路径长度是
  8. 临界矩阵 A = [ 0 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 ] A=\begin{bmatrix}0&1&0&1\\0&0&1&1\\0&1&0&0\\1&0&0&0\end{bmatrix} A=0001101001001100,则各顶点的度是
  9. 散列表的平均查找长度是?处理冲突的方法?表长度?
  10. 快速排序的平均复杂度?

二、判断题

  1. 算法的含义与程序的含义对比
  2. 线性表经常存取而少插入删除,则采用链式存储
  3. 两个栈共享一个空间,应该把栈的栈底分别设置在在空间的两端
  4. 循环队列不存在空间溢出问题
  5. 串长度指串中不同字符的个数
  6. 对应一组权值构造的Huffman树不唯一
  7. 度为2 的有序树为二叉树
  8. ADE网络中的关键路径上的节点的最早开始时间和最晚开始时间相同
  9. 散列表查找不需要任何比较
  10. 最小生成树的Kruskal算法是一种贪心算法

三、填空题

  1. 评价算法的两个指标
  2. 删除单链表中p指向节点的前驱节点的时间复杂度
  3. 1、2、3进入空栈,则出栈顺序组成的序列有几种
  4. 循环队列的引入是为了克服
  5. 主串S=”abccdcdccbaa“,子串T=”cdcc“,则几次匹配成功
  6. 二维数组 A [ 0 … 8 , 0 … 9 ] A[0\dots8,0\dots 9] A[08,09],每个数组占用3存储单元,首地址为SA开始,按行存放, A [ 8 ] [ 5 ] A[8][5] A[8][5]的起始地址
  7. n节点二叉树,使用二叉链表存储,包含几个空指针域
  8. n顶点无向图的每个顶点的度最大为
  9. 拉链法构造一个数列表,函数为 H ( k e y ) = k e y % 17 H(key)=key\%17 H(key)=key%17,需要几个链表
  10. 二路归并排序算法的时间复杂度

四、问题求解

  1. 字符串S有6种字符视为 { A 、 B 、 C 、 D 、 E 、 F } \{A、B、C、D、E、F\} {ABCDEF},分别出现 2 、 3 、 7 、 10 、 4 、 5 2、3、7、10、4、5 2371045

    1. 设计哈夫曼编码画出哈夫曼树,给出编码(左0右1)
    2. S的编码至少几位(树的带权路径长度)
  2. 关键字序列 ( 13 , 5 , 20 , 19 , 15 , 8 ) (13,5,20,19,15,8) (13,5,20,19,15,8)插入到表长为8的散列表,函数为 H ( k e y ) = k e y % 7 H(key)=key\%7 H(key)=key%7,利用线性探查法解决冲突

    1. 计算关键字对应的散列地址,画出解决冲突构造的散列表
    2. 计算等概率下查找成功的平均查找长度
  3. 已知某有向带权图11个节点的连接方式,以3为出发点,使用Dijkstra算法列出3到其余顶点的最短路径,并填写动态执行情况,U为选定的节点集合,D[i]表示顶点到点i的距离,P[i]表示源点到顶点i时,顶点i的前驱节点(M表示无穷大)

    1. 动态执行情况:
    2. 列出顶点3到各顶点最短路径
0 → \rightarrow 2 63 → \rightarrow 1 255 → \rightarrow 1 126 → \rightarrow 4 9
0 → \rightarrow 4 63 → \rightarrow 6 135 → \rightarrow 2 16 → \rightarrow 9 4
0 → \rightarrow 5 173 → \rightarrow 8 95 → \rightarrow 4 37 → \rightarrow 1 7
1 → \rightarrow 3 174 → \rightarrow 5 35 → \rightarrow 7 107 → \rightarrow 5 11
2 → \rightarrow 5 114 → \rightarrow 6 45 → \rightarrow 8 47 → \rightarrow 9 6
2 → \rightarrow 7 64 → \rightarrow 7 36 → \rightarrow 0 1210 → \rightarrow 1 15
3 → \rightarrow 0 14 → \rightarrow 8 16 → \rightarrow 1 510 → \rightarrow 5 2
3 → \rightarrow 10 34 → \rightarrow 9 156 → \rightarrow 2 110 → \rightarrow 8 7
循环U D [ 0 ] , … , D [ 10 ] D[0],\dots,D[10] D[0],,D[10] P [ 0 ] , … , P [ 10 ] P[0],\dots,P[10] P[0],,P[10]
初始化{3}1 25 M 0 M M 13 M 9 M 33 3 0 3 0 0 3 0 3 0 3
1
  1. 给定数字序列50、37、66、98、75、14、28、50,排序以第1个数字为基准,使用快速排序

    1. 一排:
    2. 二排:
    3. 三排:

五、算法设计

  1. 串采用链式存储结构,填写程序,完成串的模式匹配
typedef struct linknode{
    char data;
    struct linknode *next;
}linkstring

linkstring* Index(linkstring *s,linkstring *t){
    linkstring *first,*sptr,*tptr;
    first=s;
    sptr=first;
    @1········
    while(sptr&&tptr){
        if(@2········){
            sptr=sptr->next;
            @3········
        }else{
            first=first->next;
            @4········
            tptr=t;
        }
    }
    if(tptr=NULL)
        @5········
    else
        return NULL;
}
  1. 以二叉链表作为存储结构,编写算法求二叉树中度为1的结点个数
typedef struct Node{
    char data;
    struct Node *leftchild,*rightchild;
}BinTree

int CountNodes(BinTree *root){
    
    
    
    
    
    
    
}
  • 1
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知谢长安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值