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

2017年南京理工大学计算机科学与工程学院824计算机专业基础A之数据结构考研强化模拟题

  摘要

一、填空题

1. 在双向循环链表中,向P 所指的结点之后插入指针f 所指的结点,其操作是_____、_____、_____、_____。 【答案】

2. 设用希尔排序对数组{98,36,-9,0,47,23,1,8,10,7}进行排序,给出的步长(也称

增量序列)依次是4,2,1则排序需_____趟,写出第一趟结束后,数组中数据的排列次序_____。

【答案】3; (10,7,-9,0,47,23,1,8,98,36)

3. 如下的算法分别是后序线索二叉树求给定结点node 的前驱结点与后继结点的算法,请在算法

,其空格处填上正确的语句。设线索二叉树的结点数据结构为(lflag ,lcft ,data ,right ,rflag )

中:lflag=0,lcft 指向其左孩子,lflag=1,left 指向其前驱:rflag=0,right 指向其右孩子,rflag=1,right 指向其后继。

Prior (node , x )

{ if(node !=null)

If ( (1) ) *x=node->right;else * x-node->left;

}

next (bt , node, x )/*bt是二叉树的树根*/

{ (2) ;

if (node->rflag)(3);

else {do t=*x;;

while (*x==node );

*x=t;

}

}

【答案】nodc->rflag==O; *x=ht; *x=nodc->right; prior (t , X )

4. 关键码序列(Q ,H ,C ,Y ,Q ,A ,M ,S ,R ,D ,F ,X ),要按照关键码值递增的次序进行排序,若采用初始步长为4的希尔排序法,则一趟扫描的结果是_____; 若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是_____。

【答案】(Q ,A ,C ,S ,Q ,D ,F ,×,R ,H ,M ,Y ); (F ,H ,C ,D ,a ,A ,M ,Q ,R ,S ,Y ,X )

【解析】希尔排序的基本思想是:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

快速排序(quicksort )的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

5. 在哈希函数中,P 值最好取_____。

【答案】小于等于表长的最大素数或不包含小于20的质因子的合数

【解析】在使用除留余数法时,对除数P 的选择很重要。若P 选的不好,容易产生同义词。一般情况下,可以选P 为质数或不包含小于20的质因素的合数。

6. 如果按关键码值递増的顺序依次将关键码值插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为_____。 【答案】

【解析】如果关键码是排好序的,构建二叉排序树就会形成一个单支树,它的查找效率和顺 序查找效率一样为

7. 已知二叉排序树的左右子树均不为空,则_____上所有结点的值均小于它的根结点值,_____上所有结点的值均大于它的根结点的值。

【答案】左子树;右子树

【解析】二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:①若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;②若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;③它的左、右子树也分别为二叉排序树。

8. 已知二维数组中每个元素占4个单元,在按行优先方式将其存储到起始地址为1000的连续存储区域时,

【答案】1196

【解析】设元素的行标为i ,列标为j 。则它的存储位置为:

9.

=_____

【答案】5

10.已知链队列的头尾指针分别是f 和r , 则将值x 入队的操作序列是_____。 【答案】

【解析】队列采用链式存储结构,先分配一个节点的内存,然后在队尾添加该节点。

的地址是:_____。

11.深度为H 的完全二叉树至少有_____个结点; 至多有_____个结点; H 和结点总数N 之间的关系是_____。 【答案】

12.按LSD 进行关键字排序,除最次位关键字之外,对每个关键字进行排序时,只能用_____的排序方法。

【答案】稳定

二、选择题

13.下列选项中,不可能在用户态发生的事件是( )。

A. 系统调用

B. 外部中断

C. 进程切换

D. 缺页

【答案】C 。

【解析】我们在学习操作系统中知道,任何一个进程在现代操作系统中为了共享和保护,设

,在用户态运行用户的程序,在内核定了用户态和内核态(可以通过设置软、硬件标志位来实现)

运行系统的程序。所以,从选 项来看,系统调用可以在任何态发生,用户可以发起系统调用,系统也可以;外部中断是不可控的,也会在任何时刻发生,缺页的发生也是不可控的,可以发生在用户代码之间;而进程切换却不会在用户态发生。我们可以考虑一下情形,进程切换是在什么时候发生的,进程切换前必定运行的是进程调度,只有进程调度选择了下一次被调度的进程,进程切换才可以进行。进程调度是scheduler , 进程切换是dispather , 这体现了现代操作系统策略与机制

,必定分离的设计思想。所以,进程切换必定不会在用户态发生(所谓发生指其起始的源头时刻)

是在内核态(进程调度)发生的。

14.假定不采用Cache 和指令预取技术,且机器处于“开中断”状态,则在下列有关指令执行的叙述中,错误的是( )。

A. 每个指令周期中CPU 都至少访问内存一次

B. 每个指令周期一定大于或等于一个CPU 时钟周期

C. 空操作指令的指令周期中任何寄存器的内容都不会被改变

D. 当前程序在每条指令执行结束时都可能被外部中断打断

【答案】C

【解析】本题涉及的概念比较多。首先,如果不采用Cache 和指令预取技术,每个指令周期中至少要访问内 存一次,即从内存中取指令。其次,指令有的简单有的复杂,每个指令周期总大于或等于一个CPU 时钟周期。第三,即使是空操作指令,在指令周期中程序计数器PC 的内容也会改变为取下一条指令做准备。第四,如果机器处于“开中断”状态,在每条指