中国科学院软件研究所 一九九七年招收硕士学位研究生入学考试试题 试题名称:软件基础 第一部分:数据结构和程序设计 是非题(正确填√,错误填×)(1分×10) ( )1.稀疏矩阵压缩存储后,必会失去随机存取功能。 ( )2.完全二叉树的某结点若无左孩子,则它必是叶结点。 ( )3.由一棵二叉树的前序序列和后序序列可以唯一确定它。 (  )4.在n个结点的无向图中,若边数>n-1,则该图必是连通图。 ( )5.若一个有向图的邻接矩阵中对角线以下元素均为零,则该图的拓扑 有序序列必定存在。 ( )6.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速 度。 ( )7.在任意一棵非空二叉排序树,删除某结点后又将其插入,则所得二 叉排序树与删除前原二叉排序树相同。 ( )8.若一个广义表的表头为空表,则此广义表亦为空表。 ( )9.二叉树是度数为二的有序树。 ( )10.对磁带机而言,ISAM是一种方便的文件组织方法。 程序阅读题(共18分) 设m,n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5,有5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。 ①以下是该函数的程序段,请将未完成部分填入,使之完整。 int f(m,n) int m,n; { if (m==1) return ; if (n==1) { return ; } if (m<n) { return f(m,m); } if (m==n) { return 1+ ; } return f(m,n-1)+f(m-n, ); } ②执行程序,f(6,4)= ; 设输入为整数数组A[1..n],其中1≦A[i] ≦k(1≦i≦n);输出数组为B[1..n];C[1..k]是临时工作空间;阅读下述算法后,回答下列问题: Proc Demo(A,B,k) { ⑴ for i:=1 to k do C[i]:=0; ⑵ for j:=1 to n do C[A[j]]:=C[A[j]]+1; ⑶ for i:=2 to k do C[i]:=C[i]+C[i-1]; ⑷ for j:=n downto 1 do { ⑸ B[C[A[j]]]:=A[j]; ⑹ C[A[j]]:=C[A[j]]-1; } } 当标号⑵行的循环执行完后,C[i](1≦i≦n)的值有何意义? 当标号⑶行的循环执行完后,C[i](1≦i≦n)的值有何意义? 算法执行后,B的内容有何特点? 当k=O(n)时,算法的时间复杂度是多少? (10分)设大根堆(即堆顶元素最大)的存储结构为: type HEAP=record keys:array[1..max] of keystype; /*存放堆元素的空间*/ size : int ; /*当前堆中已有的元素个数*/ end; 写一算法HeapInsert(var heap:HEAP;key:keystype)将关键字key插入到堆heap中且不破坏堆性质。(提示:先将key插入到数组的size+1位置上,然后自底向上调整)。 (12分)设二叉排序树的存储结构为: type TREE=↑node; node = record key :keytype; size :int; lchild,rchild,parents:TREE; end; 一个结点x↑的size域的值是以该结点为根的子树中结点的总数(包括x ↑ 本身)。例如,下图中x所指结点的size值为4。设树高为h,试写一时间 为O(h)的算法Rank(T:TREE;x:↑node)返回x所指结点在二叉排序树 T的中序序列里的排列序号,即: 求x结点是根为T的二叉排序树中 第几个最小元素。例如,下图x所 指结点是树T中第11个最小元素。 (提示:你可利用size值和双亲 指针parents)。 第二部分:操作系统和编译技术 填空题(1分×9) 实现虚拟存储器,应有以下几种物质基础来支持:① ② ③ 。 页面淘汰算法选得不好会引起 现象。 从资源管理的角度看,I/O设备分为 设备、 设备和 设备三类。 引入缓冲的原因在于: 和 。 简答题(共16分) 一个分层结构操作系统有下列部分组成:裸机、用户、CPU调度和PV操作、文件管理、作业管理、内存管理、设备管理、命令管理等。试按层次结构的原则从内到外将各部分重新排列。 产生死锁的必要条件是什么?解决死锁问题常用哪几种措施? UNIX进程映像由哪几部分组成?简述各部分的内容。 (10分)为正规式 构造一个确定的有限自动机。 (15分)试画出如下中间代码序列的程序流图,并求出: 各结点的必经结点集合D(n); 流图中的回边与循环。 J:=0; L1: I:=0; if I<8 goto L3; L2: A:=B+C; B:=D*C; L3: if B=0 goto L4; write B; goto L5; L4: I:=I+1; if I<8 goto L2; L5: J:=J+1; if J<=3 goto L1; HALT