BUAA 2022级“数据结构”期末考试

部分试题包括:所有填空,选择,以及第一道大题。

目录

一、选择题

 二、选择题

三、编程题

1. 查找同时空人员

2. 老鼠回家-无回路

3. 文件拷贝


先声明,因为没有正确答案,全是笔者自己写的,所以不能保证对错,也就没有贴出来。后面程序题的代码虽然过了评测,但因为笔者觉得自己写的像答辩,所以也没贴出来,有需要的可以评论。

一、选择题

1.具有n个顶点的无向图用邻接矩阵表示,若该图为连通图,则其邻接矩阵中至少有()个非零元素。
A.2*(n-1)
B.n-1
C.n*n
D.n*(n-1)

2.某栈的输入序列为25,30,7,10,下面的四个序列中,()不可能是它的输出序列。

A.10,7,25,30
B.30,7,10,25
C.25,7,30,10
D.7,10,30,25

3.在堆排序中,基于关键字序列6,9,1,5,8,4,7建立初始大顶堆H,得到的H是() 。

A. 9,8,7,6,5,4,1

B. 9,8,7,5,4,1,6

C. 9,8,7,5,6,4,1
D. 9,6,7,5,8,4,1

4.下列排序方法中,不稳定的排序方法是()。
A.冒泡排序
B.归并排序
C.快速排序
D.插入排序

5.栈和队列的共同点是()。
A.都是先进先出
B.都是先进后出
C.只允许在端点处插入和删除元素
D.没有共同点

6.有一无向图G=(V,E),其中: V={a,b,c,d,e,},E={(a,b),(a,e),(a,c),(b,d),(c,f),(f,d),(e,c)},则下面的顶点序列中,()是该图深度优先遍历的一个正确的输出序列。

A. a,b,e,c,d,f

B. a,c,f,e,b,d

C. a,e,b,f,c,b

D.a,e,c,f,d,b

7.若对序列(2,12,16,70,5,10)按值从小到大进行排序,前三趟排序的结果分别为:
第1趟排序的结果:(2,12,16,70,5,10),
第2趟排序的结果:(2,5,16,70,12,10),
第3趟排序的结果:(2,5,10,70,12,16)
则由此可以断定,该排序过程采用的排序方法是()。
A.快速排序
B.选择排序
C.插入排序
D.冒泡排序

8.若在有序序列中采用折半查找方法进行查找,用来描述该查找过程的“判定树”的形状与()有关。
A.序列中元素的排列次序
B.序列中元素的值
C.序列中元素的个数
D.序列中元素的类型

9.一棵满二叉树有m个树枝,n个结点,其深度为h,则()。
A.n=h+m
B.h+m=2n
C.m=h-1

D.n-2^h - 1

10.一有向带权图如下图所示,若采用迪杰斯特拉 (Dijkstra)算法求源点a到其他各顶点的最短路径,得到的第一条最短路径的目标顶点是b,后续得到的其余各最短路径的目标顶点依次是()。


A. d,c,e,f
B. d,e,c,f
C. d,f,e,c
D. d,f,c,e

 二、选择题

1.一棵5阶B-树,除根结点以外的其它分支结点中最少有(  )个关键字。

2.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是(  )。

3.若以{3,7,2,9,18,4}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是(  )。

4.设有一组记录的关键字为(19,16,23,1,68,20,84,27,55,11,10,81),利用散列存储,地址空间范围为[0...12],散列函数为H (key) =key MOD 13,利用链地址法解决散列冲突,则散列地址为3的链中有(  )个链结点。

5.已知一个有向图,其共有10个顶点,则其最多有(  )条边。

6.下图的最小生成树的权值是(  )。

 7.已知二叉树的中序序列为: BADCE,后序序列为: BDECA,则其前序序列为: (  )。

8.一棵完全二叉树,第6层的叶子结点个数为20,该树最多有(  )个结点。

9.若用一个大小为10的数组(下标从0开始)来实现循环队列,且当前rear和front的值分别为1和4,当从队列中出队一个元素,再入队两元素后,rear和front的值分别为(  )和(  )。

10。对序列进行从小到大排序,若序列的原始状态为1,2.3,4,5,10.6.7,8.9,要想使得排序过程中元素的比较次数最少,应该采用(  )方法。

三、编程题

1. 查找同时空人员

【问题描述】

假设一共有6个手机基站,都具有记录手机连接基站状态的能力,当手机进入和离开基站固定范围后,基站将及时记录手机的连接信息:

1、约定基站覆盖范围不存在重合,也就是同一个手机在同一时间内只会处于一个基站覆盖范围内;

2、同一个手机在同一个基站上多次连续登录,属于正常情况,说明该手机不断出入该基站的覆盖范围。

编写程序,读入某一天多个基站的手机登录日志信息(服务商提供的日志信息是按手机进入基站的时间排好序,详见样例输入)和一个要查找的人员手机号,查找与该人员同时空人员的手机号(即与该手机号基站相同且进入与离开时间有重叠的手机号;若一手机号的进入时间与另一手机号的离开时间完全相同,两手机号也算有重叠。)。输出与指定手机号有时空重叠的手机号及所在基站。

基站的手机登录日志信息包括:手机号(11位的数字,按字符串处理)、基站编号(一共为6个基站,分别用大写字母A、B、C、D、E、F表示)、登录时间和登出时间(用长度为6的数字串表示,例如:093756,表示9点37分56秒)。

【输入形式】

先输入手机登录日志信息的条数(小于1000条),然后按上述格式分行输入手机登录日志信息,手机号、基站编号、登录时间和登出时间之间以一个空格分隔。

【输出形式】

按照手机号由小至大进行排序,分行输出与指定手机号有时空重叠的手机号及所在基站编号,手机号与基站编号之间以一个空格分隔。手机号相同时按基站字母序排序输出。

【样例输入】

28

18222336979 F 060201 063539

18222336979 B 063601 063802

18222336979 C 063806 064607

18222336979 D 064615 065816

18222336979 A 065827 160003

18222336979 D 160013 161605

18222336979 C 161617 162633

18222336979 B 162702 172333

13810013509 C 080005 092537

13810013509 A 100356 124732

13810013509 C 125021 161619

13810013509 F 162315 163857

13810013509 B 163901 205602

13810013509 C 210509 230108

13810013509 D 230901 232556

13557912211 B 060615 080239

13557912211 E 120507 150309

13557912211 C 162633 163621

13557912211 B 163855 172209

13557912211 D 200609 230901

13985992766 A 070000 120203

13985992766 F 130506 160000

13985992766 B 160102 161503

13985992766 C 161617 163058

13985992766 E 163302 180709

13985992766 D 190005 200729

15857596331 D 000201 235051

13877882206 C 003123 220806

13557912211

【样例输出】

13810013509 B

13810013509 D

13877882206 C

13985992766 C

13985992766 D

15857596331 D

18222336979 B

18222336979 C

【样例说明】

先 输入了28条手机登录基站的日志信息,然后输入手机号13557912211,表示要查找与该手机号同时空的手机号。该手机号首先在6点6分15秒登录B 基站,在8点2分39秒登出B基站,在这个时间段内只有手机号18222336979 存在重叠;指定手机号登录登出过E基站,但没有存在重叠的手机号;指定手机号在C基站与3个手机号发生重叠,其余重叠情况类似。按照这些手机号由小至大进行排序,分行输出与指定手机号有时空重叠的手机号及所在基站编号,手机号相同时按基站字母序排序输出。

【评分标准】

该题要求查找与指定手机号同时空的手机号,提交程序名为same.c。

以下是笔者对这道编程题的提醒:

1.当同时有多组数据都是同一个手机号在同一个基站与指定手机号有时空重叠,要删去多余的,只留下一组。

2.判断时空重叠的方式有两种,注意不要遗漏。

3.读取手机号需要用到字符串,因为11位手机号int类型存不下,排序可以用strcmp函数。

strcmp(str1, str2):比较字符串str1和str2,返回一个整数,如果str1>str2,返回正数;如果str1<str2,返回负数;如果str1=str2,返回0。

4.推荐使用结构体(笔者自己用结构体感觉很合适)

2. 老鼠回家-无回路

【问题描述】

老鼠离家去找食物,要经过不断探索才能找到食物。某老鼠非常聪明,在原路返回时能够避免找食物时多走的冤枉路,找到直接回家的路。

编写程序,读入该老鼠找食物过程中的轨迹记录,然后分析出其原路回家的最佳路径(即:走过的路,但不包括冤枉路)。在此冤枉路指的是原路返回的路;而且假设老鼠走过的路不会形成环。

算法提示:使用栈保存老鼠走过的轨迹;每当读入老鼠新的轨迹时,检查栈顶元素,判断新轨迹能否与栈顶轨迹抵消(全部或部分),然后进行入栈或出栈操作,示例见样例说明。

【输入形式】

输入为一系列老鼠轨迹。老鼠轨迹以行进方向和步数对来表示。行进方向包括:1-上、2-下、3-左、4-右,步数为一个整数值,行进方向和步数为0时表示输入结束。例如:1-4,表示向上行进4步,1和4之间为英文减号“-”。各行进步数间以一个空格分隔。最后的0-0后为换行符。老鼠行走的总步数不超过1000步。

    

以上图为例(图中数字为路的长度,以老鼠的步数为单位),老鼠从家开始找食物的轨迹输入如下:

1-2 3-4 1-7 2-3 4-3 3-3 2-4 4-4 1-6 4-2 2-2 1-2 3-4 1-3 0-0

【输出形式】

按照上述要求输出老鼠从食物回家的最佳路径,输出格式同输入,最后一步后有无空格均可。

【样例输入】

1-2 3-4 1-7 2-3 4-3 3-3 2-4 4-4 1-6 4-2 2-2 1-2 3-4 1-3 0-0

【样例输出】

2-3 4-2 2-8

【样例说明】

老 鼠从家出发,开始向上走,前3次轨迹后栈的状态如下图所示;轨迹4因为是往下走3步,与栈顶的往上走7步(1-7)相比较,属于原路返回的路,可以从栈顶 轨迹中核减掉,结果如下图所示;轨迹6、7、8都是往回走,结果如下图所示;其它轨迹类似,轨迹14后找到食物,最后输出原路回家的最佳路径,既将栈中的轨迹反向输出(部分轨迹要合并)。

【评分标准】

该题要求找到回家的最佳路径,提交程序名为path.c。

3. 文件拷贝

【问题描述】

假设已有一个文件目录和一组带有全目录路径的文件,请将该组文件按下面规则拷贝到已有文件目录中,并按要求输出拷贝后的文件目录:

1.若相应目录下无给定文件,则将该文件直接拷贝到相应目录下;

2.若相应目录下有给定同名文件且拷入文件比原有文件日期较新,则用新文件覆盖已有同名文件,否则不执行任何操作;

3.若相应目录中无给定文件目录路径上的某个子目录,则在当前目录相应目录下创建相应子目录及文件。

假设要拷贝的文件根目录与已有文件根目录是相同的

例如:若已有下图所示目录(文件名下方数字是其日期时间):

要拷贝的一组文件(文件名后为相应文件日期时间)如下所示:

D:\doc\test\test.c 202205181107

D:\doc\work\data.xls 202206230907

D:\doc\work\temp\plans.doc 202206171705

D:\temp\plan.doc 202206171502

D:\doc\work\report.ppt 202203250830

D:\doc\work\math.doc 202207021506

按上面规则文件拷贝后目录如下图所示:

【输入形式】

目录以下面形式给出:a1(a11,a12,a13,……,a1n),表中a1是根目录编号,括号中每个元素,可以是一个具体文件编号 ,也可以是以同样方式定义的一个子目录编号。例如,下面方式:1(2(4),3(5(7,8,9),6))则表示了如下目录树:

其中1为根结点目录编号,其有2个编号为2和3的子目录,而编号为2的子目录有一个编号为4的子目录或文件,以此类推。任一结点的子结点个数不超过100个所有编号大于等于1且小于等于1000,编号在一个目录树中是惟一的

以上面形式定义的一个已有目录树保存在当前目录下的文件in.txt中,目录树中的字符都是英文字符,字符数不超过5000,只包含数字、小括号和逗号;在目录树后,in.txt分行保存目录树中每个结点编号所对应的文件名(不超过20个字符)、文件属性(1表示目录,0表示普通文件)和日期时间(文件用12位数字串表示,目录没有时间,用英文减号字符"-"表示),各数据间以1个空格分隔。

从标准输入读入要拷贝的文件数目,然后分行读入每个文件的全路径信息和日期时间(两者之间以一个空格分隔),最后一个文件信息后也有换行符。

【输出形式】

层次遍历序分行输出拷贝后目录树中的文件及相应日期时间,同一层的按时间序输出,若同一层的时间也相同,则按照文件名的字典序输出。注意只输出普通文件信息,不输出目录信息。

【样例输入】

in.txt文件内容如下:

100(25,32(18,1(26,37,66(17))),101(2,3))

100 D: 1 -

101 temp 1 -

2 plan.doc 0 202206051202

3 test.c 0 202206120912

25 data 1 -

32 doc 1 -

18 temp 1 -

1 work 1 -

26 data.xls 0 202206211925

37 report.ppt 0 202203260918

66 temp 1 -

17 plan.doc 0 202206051202

标准输入如下:

6

D:\doc\test\test.c 202205181107

D:\doc\work\data.xls 202206230907

D:\doc\work\temp\plans.doc 202206171705

D:\temp\plan.doc 202206171502

D:\doc\work\report.ppt 202203250830

D:\doc\work\math.doc 202207021506

【样例输出】

test.c 202206120912

plan.doc 202206171502

report.ppt 202203260918

test.c 202205181107

data.xls 202206230907

math.doc 202207021506

plan.doc 202206051202

plans.doc 202206171705

【样例说明】

根据in.txt文件中输入的目录树和文件目录信息,可以生成如上面第一张图所示的文件目录;将标准输入中读入的6个文件拷贝到该文件目录后,状态如上面第二张图所示,最后将其中的文件信息按层次输出到标准输出。
【评分标准】

该题要求将指定的文件拷贝到文件目录中,提交程序名为copy.c。

最后提醒大家把作业里的选择题多看看,考试很有可能会出作业里的题。

祝大家考试顺利!

以下是往年题目:BUAA 2020级“数据结构与程序设计”期末考试【含往年试题下载】

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值