当前位置:问答库>考研试题

2017年天津大学数据结构考研复试核心题库

  摘要

一、应用题

1. 系统中有多个生产者进程和消费者进程,,共享用一个可以存1000个产品的缓冲区(初始为空)当缓冲区为未满时,生产者进程可以放入一件其生产的产品,否则等待;当缓冲区为未空时,消费者进程可以取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品,请用信号量

求写出完整的过程;并指出所用信号量的含义和初值

【答案】设置5个信号量

empty :表示缓冲区是否为空,初值为1000 full :

表示缓冲区是否为满,初值为0

mutex 1:生产者之间的互斥信号,初值为1 mutex2:消费者之间的互斥信号,初值为1 available :当前消费者能否访问缓冲区,初值为1

定义变量in , out 分别为生产者和消费者进程所要使用的指针,指向下一个可用的缓冲区单元,MaXNum= 1000 为缓冲区的大小,count 标志当前消费者已经取的产品的数量,初值为0

生产者进程:

生产一个产品;

产品送入buffer (in );

消费者进程

取出产品buffer (out );

第 2 页,共 36 页

操作实现进程间的互斥和同步,要

2. 队列可以用循环单链表来实现,故可以只设置一个头指针或者只设置一个尾指针。请你分析对于循环单链表实现的队列,用哪种方案更合适。

【答案】循环单链表若只设头指针,则出队操作时间复杂度是是

若只设尾指针,则出队和入队操作时间复杂度都是

而如对操作时间复杂度

因此,用循环单链表来实现队

列,设置一个尾指针更合适。

3. 假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间。例如,“loading ”和“being ”的存储映像如图所示。

图 存储映像7K 意图

设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为符i 所在结点的位置p )。要求:

(1)给出算法的基本设计思想。 (2)根据设计思想,采用C 或【答案】

(1)算法的基本设计思想:

①分别求出strl 和str2所指的两个链表的长度m 和n ;

②将两个链表以表尾对齐:令指针p 、q 分别指向strl 和str2的头结点,若表中的第

个结点;若

则使q 指向链表中的第

表尾的长度相等。

③反复将指针p 和q 同步向后移动,并判断它们是否指向同一结点。若p 和q 指向同一结点,则该点即为所 求的共同后缀的起始位置。

(2)用C 语言算法描述如下:

两个指针同步向后移动

第 3 页,共 36 页

请设计一

个时间上尽可能高效的算法,找出由strl 和str2所指的两个链表共同后缀的起始位置(如图中字

或JA V A 语言描述算法,关键之处给出注释。

(3)说明你所设计算法的时间复杂度。

则使p 指向链

个结点,即使指针p 和q 所指的结点到

返回共同C 缀的起始点

其中m 、n 分别为两个链表的

(3)参考答案的时间复杂度为:长度。

4.

某局域网采用程。

协议实现介质访问控制,

数据传输率为主机甲和主机乙之

间的距离为2km ,信号传播速度是200000km/S。请回答下列问题,要求说明理由或写出计算过

(1)若主机甲和主机乙发送数据时发生冲突,则从开始发送数据时刻起,到两台主机均检测到冲突时刻止,最短需经过多长时间? 最长需经过多长时间?(假设主机甲和主机乙发送数据过程中,其他主机不发送数据)

(2)若网络不存在任何冲突与差错,主机甲总是以标准的最长以太网数据帧(1518字节)向主机乙发送数据,主机乙每成功收到一个数据帧后立即向主机甲发送一个64字节的确认帧,主机甲收到确认帧后方可发送下一个数据帧,此时主机甲的有效数据传输速率是多少?(不考虑以太网帧的前导码)

【答案】(1)当甲乙两台主机同时向对方发送数据时,两台主机均检测到冲突的时间最短

=

(lkm/200000km/s)×2=10j×s ; 当一台主机发送的数据就要到达另一台主机时,另一台主机才发送数据,两台主机均检测到冲突的时间最长:

=1500B=1500×8bit=12000bit; 发送1518B 的发送时间=1518×8/10Mbps=间=2km/200000km/s

=

确认帧的发送时间=64×

8/10Mbps=

; 确认帧的传播时间

=2km/200000km/s=

;

发送1518B

所用的总时间为

主机甲的有效数据传输率为12000bit /

1285.6μs=9.33Mbps。

5. 以归并算法为例,比较内部排序和外部排序的不同,说明外部排序如何提高操作效率。

【答案】(1)内部排序中的归并排序是在内存中进行的归并排序,辅助空间为

外部归

并排序是将外存中的多个有序子文件合并成一个有序子文件,将每个子文件中记录读入内存后的排序方法可采用多种内排序方法。外部排序的效率主要取决于读写外存的次数,即归并的趟数。

(2)因为归并的趟数部排序的效率。

第 4 页,共 36 页

数据帧的传播时

(2)有效数据传输速率=发送的有效数据/发送有效数据所用的总时间。发送的有效数据

其中,m 是归并段个数,k 是归并路数。增大k 和减少m 都

可减少归并趟数。应用中通过败者树进行多(k )路平衡归并和置换一选择排序减少m ,来提高外