数据结构 浙江大学 2019春期中考试

补更一下。

请使用浏览器快捷键Ctrl+F搜索题目

判断题

1. 所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。

TF

2. 对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。

TF

3. 已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。

TF

4. 在一棵二叉搜索树上查找63,序列39、101、25、80、70、59、63是一种可能的查找时的结点值比较序列。

TF

5. 通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出的序列为:123。

TF

6. 如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。

TF

7. 将1、2、3、4、5、6顺序插入初始为空的AVL树中,当完成这6个元素的插入后,该AVL树的先序遍历结果是:4、2、1、3、5、6。

TF

8. 算法分析的两个主要方面是时间复杂度和空间复杂度的分析。

TF

9. 一棵有124个结点的完全二叉树,其叶结点个数是确定的。

TF

10. 用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。

TF

单选题

1. 已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是:

A.39B.52C.111D.119

2. 三叉树中,度为1的结点有5个,度为2的结点3个,度为3的结点2个,问该树含有几个叶结点?

A.8B.10C.12D.13

3. 下列函数中,哪个函数具有最快的增长速度?

A.N​2logNB.N(logN)​4C.N3D.NlogN​2

4. 先序遍历图示二叉树的结果为

在这里插入图片描述

A.A,B,C,D,H,E,I,F,GB.A,B,D,H,I,E,C,F,GC.H,D,I,B,E,A,F,C,GD.H,I,D,B,E,F,G,A,C

5. 设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?

A.0B.2C.4D.5

6. 设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是:

x = 0;
while ( n >= (x+1)*(x+1) )
    x = x+1;
A.O(logn)B.O(n​1/2​​)C.O(n)D.O(n2)

7. 在一个不带头结点的非空链式队列中,假设f和r分别为队头和队尾指针,则插入s所指的结点运算是( )。

A.f->next=s; f=s;B.r->next=s; r=s;C.s->next=s; r=s;D.s->next=f; f=s;

8. 带头结点的单链表h为空的判定条件是:

A.h == NULL;B.h->next == NULL;C.h->next == h;D.h != NULL;

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

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

10. 若某图的深度优先搜索序列是{V2, V0, V4, V3, V1},则下列哪个图不可能对应该序列?

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

11. 对最小堆(小顶堆){1,3,2,12,6,4,8,15,14,9,7,5,11,13,10} 进行三次删除最小元的操作后,结果序列为:

A.4,5,6,7,8,9,10,11,12,13,14,15
B.4,6,5,13,7,10,8,15,14,12,9,11
C.4,6,5,12,7,10,8,15,14,9,13,11
D.4,5,6,12,7,10,8,15,14,13,9,11

12. 表达式a*(b+c)-d的后缀表达式是:

A.a b c + * d -B.a b c d * + -C.a b c * + d -D.- + * a b c d

程序填空题

1. 下列代码的功能是返回带头结点的单链表L的逆转链表。

答案
  • Old_head->Next = New_head
  • L->Next = New_head
完整代码
List Reverse( List L )
{
    Position Old_head, New_head, Temp;
    New_head = NULL;
    Old_head = L->Next;

    while ( Old_head )  {
        Temp = Old_head->Next;
        Old_head->Next = New_head;
        New_head = Old_head;  
        Old_head = Temp; 
    }
    L->Next = New_head;
    return L;
}

2. 下列代码的功能是将大顶堆H中指定位置P上的元素的整数键值上调D个单位,然后继续将H调整为大顶堆。

答案
  • P
  • H->Elements[i] = H->Elements[i/2]
完整代码
void IncreaseKey( int P, int D, PriorityQueue H )
{
   int i, key;
   key = H->Elements[P] + D;
   for ( i = P; H->Elements[i/2] < key; i/=2 )
       H->Elements[i] = H->Elements[i/2]
   H->Elements[i] = key;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

真实的hello world

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

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

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

打赏作者

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

抵扣说明:

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

余额充值