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

2017年中国传媒大学计算机软件与理论9066程序设计复试之数据结构(C语言版)复试仿真模拟三套题

  摘要

一、应用题

1. 下图是5阶B 树,画出删去P 后的B 树,再画出删去D 后的B 树。

【答案】删除P 后

删除D 后

2. 请阅读下列算法,回答问题。

问题一:这是什么类型的排序算法,该排序算法稳定吗?

问题二:设置|的作用是什么? 若将WHILE--DO 语句中判断条件改为

第 2 页,共 22 页 该

算法将会有什么变化,是否还能正确工作?

【答案】问题一:此为直接插入排序算法,该算法稳定。

问题二:

采用的作用是监视哨,免去每次检测文件是否到尾,提高了排序效率。 描述算法后,算法变为不稳定排序,但能正常工作。

3. 文件存储结构的基本形式有哪些? 一个文件采用何种存储结构应考虑哪些因素?

【答案】文件的基本组织方式有顺序组织、索引组织、散列组织和链组织,常用的结构有顺序结构、索引结构、散列结构。

(1)顺序结构,相应文件为顺序文件,其记录按存入文件的先后次序顺序存放。顺序文传本质上就是顺序表。若逻辑上相邻的两个记录在存储位置上相邻,则为连续文件;若记录之间以指针相链接,则称为串联文件。顺序文件只能顺序存取,要更新某个记录,必须复制整个文件。顺序文件连续存取的速度快,主要适用于顺序存取,批量修改的情况。

(2)带索引的结构,相应文件为索引文件。索引文件包括索引表和数据表,索引表中的索引项包括数据表中数据的关键字和相应地址,索引表有序,其物理顺序体现了文件的逻辑次序,实现了文件的线性结构。索引文件只能是磁盘文件,既能顺序存取,又能随机存取。

(3)散列结构,也称计算寻址结构,相应文件称为散列文件,其记录是根据关键字值经哈希函数计算确定其地址,存取速度快,不需索引,节省存储空间。不能顺序存取,只能随机存取。

文件采用何种存储结构应综合考虑各种因素,如:存储介质类型、记录的类型、大小和关键字的数目以及对文件作何种操作。

4. 某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次 创建新文件。请回答如下问题。

(1)在连续、链式、索引三种文件的数据块组织方式中,哪种更合适? 要求说明理由。为定位文件数据块。需要在FCB 中设计哪些相关描述字段?

(2)为快速找到文件,对于FCB ,是集中存储好,还是与对应的文件数据块连续存储好? 要求说明理由。

【答案】根据题目所给条件,文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但是可以多次创建新文件,我们得知该文件系统是不能修改原文件的,只能将修改后的文件按新文件来存储,这与一次刻录光盘的存储方式相似。对于这样的系统,因为不需要随时添加或删除文件的内容,所以一次写入的文 件的大小是固定不变的,也是可预知的,而连续存放文件的方式就有其优点。这种方式只需要知道文件的起始地 址和文件的大小,便可以通过计算的方法找到文件的任何位置。文件若需要修改,则原文件作废,修改以后的文 件以新文件的形式重新写入,不会产生存储碎片,高效,高利用率。所以,如下作答。

(1)连续的数据块组织方式更合适,因为文件的数据一次性写入磁盘,已写入的文件不可修改,但是可以 多次创建新文件,我们得知该文件系统是不能修改原文件的,只能将修改后的文件按新文件来存储。不需要随时添加或删除文件的内容,所以一次写入的文件的大小是固定不变的,

第 3 页,共 22 页

也是可预知的。这样,只需要知道文件的起 始地址和文件的大小,便可以通过计算的方法访问文件的任意位置。

为定位文件数据块。需要在FCB 中设计相关描述字段有: <起始块号,块数>或者〈起始块号,结束块号>。

(2)将所有的FCB 集中存放,文件数据集中存放。这样在随机查找文件名时,只需访问FCB 对应的块,可减少磁头移动和磁盘I/O访问次数。

5. 如果输入序列为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。

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

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

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

删除节点后的head 为

要求

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

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

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

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

定义一个大小为n 的布尔数组flag ,初始时所有的元素都赋值为false , 用来标识遍历过程中是否出现元素绝对值为flag 的节点。然后遍历链表,遍历过程中,每一个当前结点data 域的绝对值

,则将flag 位置为真(true )所对应的flag 位:若为真,则删除该结点;若为假(false )。

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

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