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

2017年南京航空航天大学541计算机综合基础之数据结构(C)语言版复试仿真模拟三套题

  摘要

一、应用题

1. 某16位计算机主存按字节编码。存取单位为16位;采用16位定长指令格式;CPU 采用单总线结构,主要部分如下图所示。图中为通用寄存器;T 为暂存器;SR 为移位寄存器,可实现直送(mov )、左移一位(left )、右移一位(right ) 3种操作,控制信号为Srop , SR的输

ALU 可实现直送A A 加 B (add )A 减 B (sub )A 与 B (and )出信号Srout 控制;(mova )、、、、

A 或 B (or )、非 A (not )、A 加 1 (inc ) 7 种操作,控制信号为

请回答下列问题。

(1)图中哪些寄存器是程序员可见的?为何要设置暂存器T?

(2)控制信号(4)端点和的位数至少各是多少? (3)控制信号Srout 所控制部件的名称或作用是什么? 中,哪些端点须连接到控制部件的输出端?

中相应的端点之间添加必要的连线。写出连(5)为完善单总线数据通路,需要在端点

线的起点和终点,以正确表示数据的流动方向。

(6)为什么二路选择器MUX 的一个输入端是2?

【答案】(1)图中程序员可见的寄存器有通用寄存器和程序计数器PC ; 当执行算术或逻辑操作时,由于ALU 本身是没有内部存储功能的组合电路,因此如要执行加法运算,被相加的两个数必须在ALU 的两个输入端同时有效,因此设置暂存器T 用于暂存数据总线发送的数据。

(2)ALUop 和SRop 的位数分别为3,2。

(3)Srout 所控制的部件是状态字寄存器,用来存放ALU 及CPU 的指令状态。

(4)须连接到控制部件的输出端端点有

(5)

(6)数据宽度是16位,以字节编址,输入端是2是为了增加地址获取ALU 的第二个操作数。

【解析】(1)程序员可见的寄存器包括:程序计数器、通用寄存器和状态寄存器。其他的IR 、MAR 和MDR 等 是CPU 的内部工作寄存器,对程序员不可见。

(2)ALU 中共有7种命令,用三位即可区别表示,SR 共有三种命令二位二进制即可表示。 (4)操作符命令,传输等都需要控制信号进行控制。

2. 下列广义表,可以唯一对应一棵二叉树的有?并归纳出唯一对应的条件。

【答案】唯一对应一棵二叉树的有(2)、(3)和(5)。唯一对应的条件:空表、只有一个元素的表、每个子表个数是零或是2的表。

3. 写出下面算法中带标号语句的频度。

设k 的初值等于1。

【答案】(1)这是一个递归调用,因k 初值为1,由语句(6)知,每次调用k 增1,故第(1)语句执行n 次,所以频度是n 。

(2)这是FOR 循环语句,在满足(1)的条件下执行,该语句进入循环体(3)n 次,加上最后一次判断出界,故执彳丁了n +1次,所以频度是n +1。

(3)这是循环体语句,共执行了n 次,所以频度是n 。

,k=2时判断n 次,最后(4)这是循环语句,当k=l时判断n +1次(进入循环体(5)n 次)

一次k=n-l 时判断3次,故执行次数是(n +1)+n +... +3=(n +4)(n -1)/2次,所以频度是

(n +4)(n -1)/2。

(5)语句(5)是(4)的循环体,每次比(4)少一次判断,故执行次数是n +(n -1)+... +2=(n +2)(n -1)/2次,所以频度是(n +2)(n -1)/2。

(6)这是循环体语句,共执行了n -1次,所以频度是n -1。

4. 如果输入序列为123456, 试问能否通过栈结构得到以下两个序列:435612和135426; 请说明为什么不能或如何才能得到。

【答案】输入序列为123456, 不能得出435612, 其理由是,输出序列最后两元素是12, 前面4个元素(4356)得到后,栈中元素剩12, 且2在栈顶,栈底元素1不可能在栈顶元素2之前出栈。得到135426的过程如下:1入栈并出栈,得到部分输出序列1; 然后2和3入找,3出栈,部分输出序列变为13; 接着4和5入栈,5、4和2依次出栈,部分输出序列变为13542; 最后6入栈并出栈,得到最终结果135426。

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

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

6. 用单链表保存m 个整数,节点的结构为(data , link ), 且

点而删除其余绝对值相等的节点。

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

删除节点后的head 为

要求

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

(2)使用c 或语言,给出单链表节点的数据类型定义。

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

【答案】(1)算法思想:

定义一个大小为n 的布尔数组flag ,初始时所有的元素都赋值为false , 用来标识遍历过程中是

(n 为正整数)。现要求设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节(4)说明所涉及算法的时间复杂度和空间复杂度。