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

2017年湖北师范大学数据结构(同等学力加试)考研复试核心题库

  摘要

一、应用题

1. 为什么在倒排文件组织中,实际记录中的关键字域可删除以节约空间? 而在多重表结构中这样做为什么要牺牲性能?

【答案】因倒排文件组织中,倒排表有关键字值及同一关键字值的记录的所有物理记录号,可方便地查询具有同一关键字值的所有记录;而多重表文件中次关键字索引结构不同,删除关键字域后查询性能受到影响。

2. 假定在一个8位字长的计算机中运行下列C 程序段:

若编译器编译时将8个8位寄存器R1〜R8分别分配给变量回答下列问题。(提示:带符号整数用补码表示)

(1)执行上述程序段后,寄存器Rl 、R5和R6的内容分别是什么?(用十六进制表示) (2)执行上述程序段后,变量m 和kl 的值分别是多少?(用十进制表示)

(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现? 简述理由。

(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出? 上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?

【答案】(1)无符号整数运算,(Rl ) =x=134=10000110B=86H、(R5)=x-y=246=10010000B=90H、(R6)=x+y=01111100B=7CH。

(2) m 的机器数与x 的机器数相同为86H=1000 0110B,解释为带符号整数(用补码表示)时,其值为-111 1010B= -112; 同理kl=(m-n )=(x-y )=90H=1001 0000B,解释为带符号整数(用补码表示)时,其值为-111 1010B=-112;

(3)四种运算可以利用同一个加法器及辅助电路实现,n 位加法器实现的是模2n 无符号整数加法运算。对于无符号整数a 和b , a+b可以直接用加法器实现,而

实现;

对于带符号整数用补码表示,补码加减运算公式为

,所以四种运算都可在n 位加法器

中实现。

第 2 页,共 38 页

(4)判断溢出的方法有3种:一位符号位、进位位和双符号位。上述程序段中只有

语句会发 生溢出,因为2个带符号整数均为负数,它们相加之后,结果小于8位二进制所能表示的最小负数。

3. (1)如果G1是一个具有n 个顶点的连通无向图,那么G1最多有多少条边?G1最少有多少条边?

(2)如果G2是一个具有n 个顶点的强连通有向图,那么G2最多有多少条边?G2最少有多少条边?

(3)如果G3是一个具有n 个顶点的弱连通有向图,那么G3最多有多少条边?G3最少有多少条边?

1)G1最多n (n-l )/2条边,最少n-1条边。 【答案】((2)G2最多n (n-l )条边,最少n 条边。 (3)G3最多n (n-l )条边,最少n-1条边。

4. 在模试匹配KMP 算法中所用失败函数的定义中,为何要求真子串?且为最大真子串?

【答案】失败函数(即next )的值只取决于模式串自身,若第j 个字符与主串第i 个字符失配时,假定主串不回溯,模式串用第k (即next[j]个字符与第i 个相比,有

为了

不因模式串右移与主串第i 个字符比较而丢失可能的匹配,对于上式中可能存在的多个k 值,应取其中最大的一个。这样,因j-k 最小,即模式串向右滑动的位数最小,避免因右移造成可能匹配的丢失。 5. 已知两个各包含IV 和M 个记录的排好序的文件能在

两头匹配的

时间内合并为一个包含个

记录的排好序的文件。当有多于两个排好序的文件要被合并在一起时,只需重复成对地合并便可完成。合并的步骤不同,所需花费的记录移动次数也不同。现有文件,FI ,F2,F3,F4,F5,各有记录数为20,30,10,5和30,试找出记录移动次数最少的合并步骤。

,【答案】类似最优二叉树(哈夫曼树)可先合并含较少记录的文件,后合并较多记录的文件,使移动次数减少,如图所示的哈夫曼树。

第 3 页,共 38 页

6. 用单链表保存m 个整数,节点的结构为(data , link ), 且点而删除其余绝对值相等的节点。

例如若给定的单链表head 如下

(n 为正整数)。现要求

设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节

删除节点后的head 为

要求

(1)给出算法的基本思想 (2)使用c 或

语言,给出单链表节点的数据类型定义。

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

(3)根据设计思想,采用c 或【答案】(1)算法思想:

定义一个大小为n 的布尔数组flag ,初始时所有的元素都赋值为false , 用来标识遍历过程中是否出现元素绝对值为flag 的节点。然后遍历链表,遍历过程中,每一个当前结点data 域的绝对值,则将flag 位置为真(true )所对应的flag 位:若为真,则删除该结点;若为假(false )。

(2)节点的数据结构定义如下:

(3)

全局数组标志节点的绝对值是否出现过

如果此绝对值已经在节点值的绝对值中出现过则删除该节点

否则,将flag 中对应的位置置为true ,并将指针指向下一个元素

第 4 页,共 38 页

(4)说明所涉及算法的时间复杂度和空间复杂度。