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

2017年伊犁师范学院数据结构(同等学力加试)考研复试核心题库

  摘要

一、应用题

1. 两个字符串s1和s2的长度分别为m 和n 。求这两个字符串最大共同子串算法的时间复杂度

,并简要说明理由。 为T (m ,n )。估算最优的T (m , n )

【答案】最优的T (m ,n )是D (n )。串S2是串S1的子串,且在S1中的位置是1。开始求

出最大公共子串的长度恰是串S2的长度。一般情况下,

2. 二叉树的带权路径长度(WPL )是二叉树中所有叶结点的带权路径长度之和,给定一棵二叉树T ,采用二叉链表存储,节点结构为:

其中叶节点的weight 域保存该结点的非负权值。设root 为指向T 的根节点的指针,设计求T 的WPL 的算法。要求:

(1)给出算法的基本设计思想;

(2)使用C 或C++语言,给出二叉树结点的数据类型定义;

(3)根据设计思想,采用C 或C++语言描述算法,关键之处给出注释。

【答案】(1)算法的基本思路是利用利用递归的思想来求解二叉树的带权路径长度,如果当前节点不是叶子节点,那么当前节点为根的树的带权路径长度便等于它的子树的带权路径长度之和,对于此函数要传入一个当前节点的树高的形参,那么递归调用孩子节点时只需要将这个形参加一即可。

(2)

typedef struct BiNode

(3)具体算法实现如下:

如果当前节点为空节点

//如果当前节点的左右孩子节点都为空,即当前节点为叶子节点,直接返回当前节点的

WPL

//如果当前节点不是叶子节点,则对当前节点的左右子树进行递归,返回左右子树WPL 之和

3. 对给定文件(28,07,39,10,65,14,61,17,50,21)选择第一个元素28进行划分,写出其快速排序第一遍的排序过程。

【答案】快速排序的思想如下:首先将待排序记录序列中的所有记录作为当前待排序区域,

,凡其关键字不大干枢轴的记录均移动至该记录之前,以第一个记录的关键字作为枢轴(或支点)

凡关键字不小于枢轴的记录均移动至该记录之后。致使一趟排序之后,记录的无序序

割成两部分:和和

将分然后再递归地将进行快速排序。快速排序在记录有序时蜕变为起泡排序,可用“三者取中”法改善其性能,避免最坏情况的出现。本题解答如下:

初始序列:[28],07,39,10,65,14,61,17,50,21

21移动:21,07,39,10,65,14,61,17,50,[]

39移动:21,07,[],10,65,14,61,17,50,39

17移动:21,07,17,10,65,14,61,[],50,39

65移动:21,07,17,10,[],14,61,65,50,39

14移动:21,07,17,10,14,[28],61,65,50,39

4. 设度为m 的树采用多重链表存储,毎个结点有m+1个域,其中有1个数据域,m 个指向孩子的指针。 则空指针的数目是多少?说明这种存储方式的利弊。

【答案】(1)空指针数目:n (n>0)个结点的m 度树共有nm 个链域,除根结点外,每个结点均有一个指针所指,故该树的空链域有nm-(n-1)=n(m-l )+1个。

(2)利弊:这种存储结构统一,便于处理但空链域造成存储效率低。

5. 文件F 由200条记录组成,记录从1开始编号,用户打开文件后,欲将内存中的一条记录插入文件F 中,作为其第30条记录,请回答下列问题,并说明理由。

(1)若文件系统为顺序分配方式,每个存储块存放一条记录,文件F 的存储区域前后均有足够空闲的存储空间,则要完成上述操作最少要访问多少存储块? F 的文件控制区内容会有哪些改变?

(2)若文件系统为链接分配方式,每个存储块存放的一条记录和一个链接指针,则要完成上述操作最少要 访问多少存储块?若每个存储块大小为1KB ,其中4个字节存放指针,则该系统支撑文件的最大长度是多少?

【答案】(1)因为要最少访问,所以选择将前29块前移一个存储块单元,然后将要写入的记录写入到当前的第30条的位置上。由于前移都要先访问原存储块将数据读出,再访问目标存储块将数据写入,所以最少需要访问

块存储块

F 的文件区的文件长度加1,起始块号减1

(2)采用链接方式则需要顺序访问前29块存储块,然后将新纪录的存储块插入链中即可,把新的块存入磁盘要1次访存,然后修改第29块的链接地址存回磁盘又一次访存。一共就是

次。

4个字节的指针的地址范围为 所以此系统支撑文件的最大长度为

6. 已知有5个顶点的图G 如下图所示

请回答下列问题

(1)写出图G 的邻接矩阵A (行、列下标从0开始)。

(2)求什么?

【答案】(1)邻接矩阵为

矩阵中位于0行3列元素值的含义是什么? 非零元素的含义是(3)若已知具有n (n>=2)个顶点的邻接矩阵为B ,则

(2)

为:

0行3列的元素的含义是顶点0到顶点3间是相通的,并且路径长度为2的路径有2条。 (3)中非零元素的含义是:假设此顶点位于i 行j 列,表示从i 结点到j 结点路径长度为m 的路径的条数。

7.

已知一个整数序列

其中

则称x 为A 的主元素。

例如若存在

且则称5为主元素;

又如

则A 中没有主元素。假设A 中的n 个元素保存在一个一维数组中,请设计一个

尽可能高效的算法,找出A 的主元素。若存在主元素,则输出该元素;否则输出-1。要求:

(1)给出算法的基本设计思想。