2018.6.29  16:00-17:50数据结构考试

刚考完,趁着还有记忆,回忆一下考试题目。

先总结一下:考试总体还是比较简单的。有考到很细的知识点,复习时要过一遍书,知识点要多看看。毕竟数据结构考编程不多,重要的是算法思想。


一、填空题(10*2'=20')

只记得几个了。

1.告诉你AVL树的先序遍历,让你写出中序遍历。我一开始还傻傻地画图,后来一想到AVL树也叫排序树,瞬间就知道答案了,中序遍历是递增序列。

2.f(n)=50n+50log2n+50nlog2n,求时间复杂度:O(nlog2n)

3.循环队列队列满的时候,元素个数:maxSize-1

4.线性表采用查找次数比较多,问用哪种存储结构:顺序存储结构。

5.中缀表达式求值:7。

6.5阶B-树根结点的度最少为:2。

7.A[10][20]首地址是200,每个元素占一个单位,问A[6][12]地址:332。

8.考了一个概念:尴尬,忘了考的是冲突还是同义词了。

冲突:不同关键字经过散列函数映射到相同地址的现象。

同义词:不同关键字经过散列函数映射到相同地址。

我写的是冲突,好像应该填同义词???(难过.jpg)


二、选择题(10*2'=20')

1.循环队列为空的条件:front==rear。

2.书上原题:i=1;x=0;do{x++;i=3*i;}while(i<n);求渐进时间复杂度:O(log3n)

3.拓扑排序:采用邻接表是O(n+e)

4.单链表插入的程序段,p插在q后面:p->link=q->link;q->link=p;

5.以行优先规则存储矩阵元素,存储下三角元素,a23的下标为:3*(3+1)/2+2=8

6.Dijkstra算法:一共n个顶点,问下面哪句话是错的(这题一直不确定,一开始选的B,后来改的A)

A.运算一次可以得到任意两点的最短距离

B.运算n次可以得到任意两点的最短距离

C.运算一次可以得到指定点到其他n-1个顶点的最短距离

D.采用邻接矩阵存储,O(n2)


三、简答题

1.二次探测法

2.AVL树插入

3.哈夫曼树构建过程,并求WPL。

4.Prime算法,并求最小代价,答案好像是87。

5.写出快速排序的前两趟结果。


四、程序填空题(5*2'=10')

考的是书上的简单选择排序。

1:list.D[i].key < list.D[minIndex].key(翻书发现还要写.key???)

2:minIndex = i

3:startIndex < list->n-1(我好像写的是startIndex < list->n)

4:FindMin(*list,startIndex)(参数传递要写*list?我写的是list)

5:startIndex++

一直不怎么喜欢书上这个简单选择排序,都是直接三个函数并在一起写成一个函数用的,这下吃亏了。


五、算法设计题(1*10'=10')

求任意顶点v的入度。(这题还好,上午刚写过这个算法)

typedef struct ENode{
    int adjVex;
    struct ENode *nextArc;
}ENode;

typedef struct{
    int n;
    ENode **A;
}LGraph;

int Degree(LGraph g,int v){
    int i,d = 0;
    ENode *p;
    for(i = 0;i < g.n;i ++){
        for(p = g.A[i];p;p = p->nextArc){
            if(p->adjVex == v){
                d ++;
            }
        }
    }
    return d;
}

其实还是有很多难的知识点没有考的,比如:B-树的删除、二叉树遍历的应用、关键路径、图的遍历(DFS和BFS)、稀疏矩阵等等。

总结:考完感觉还行,对着课本回忆了一下题目,发现错了好多,有点小难过,没上95的话下学期跟着大二重修一下刷下分,本来想考100的。