logo资料库

2007年江苏南京农业大学数据结构与操作系统考研真题.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
2007 年江苏南京农业大学数据结构与操作系统考研真题 一.简答题(每小题 10 分,共 50 分) 数据结构部分: 1. 设有一组关键字(9, 01, 23, 14, 55, 20, 84, 27),釆用哈希函数:H(key)-key Mod 7,釆用开放定址法的二次探测再散列方法解决冲突,试在 0-9 的散列地址空间中对 该 关键字序列构造哈希表,并计算查找成功时的平均查找长度。 2. 假设用于通信的电文仅由 8 个字母组成,字母在电文中出现的频率分别为 0.07, 0. 19, 0. 02, 0. 06, 0. 32, 0. 03, 0.21, 0. 10. (1) 构造哈夫曼树; (2) 给出对应字符的编码; 3. 假设一棵二叉树的先序序列为 EBADCFHGIKJ 和中序序列为 ABCDEFGHIJK. (1) .请画出该二叉树, (2) .说明建立这棵二叉树的原理 (3) .画岀这棵二叉树的后序线索树。 4. 如图所示为一个无向带权图,假设顶点 a> b> c> d、e、f 的序号分别是 1、2、3、 4、5、 6. (1) 写出其邻接矩阵; (2) 写出其邻接表; (3) 按 Prim 算法求其一棵最小生成树 5.对于关键字序列:83, 40, 63, 13, 84, 35, 96, 57, 39, 79,分别写出应用直接插入 排序、快速排序、希尔排序(增量 dl=5),堆排序进行 排序,排序第一趟结束时的关键字 的状态。 二.算法题(每小题 8 分,共 40 分) 1. 已知两个单链表 A 和 B,其元素值按递增次序排列。请编写算法将 A 和 B 归并为一个 按元 素值递减次序排列的单链表 C,并要求利用原来两个单链表的结点存放归并后的 单链表。 2. 若已知两棵二叉树 B1 和 B2 皆为空,或者皆不空且 B1 的左、右子树和 B2 的左、右 子树分 别相似,则称二叉树 B1 和 B2 相似。试编写算法,判别给定两棵二叉树是否 相似. 3. 已知无向图 G,设计算法求距离顶点 V0 的最短路径长度为 K 的所有顶点,要求尽可 能节 省时间。
4. 假设将循环队列定义为:以域变量 rear 和 length 分别指示循环队列中队尾元素的 位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队 列的算法。 5. 已知无向图 G 釆用邻接表存储方式,试写出删除边(i, j)的算法。 一.解释下列名词,并说明关系及区别(每小题 4 分,共 20 分) 操作系统部分: 1. 并发与并行 2. 管道与通道 3. 进程与线程 4. 临界区与临界资源 5. 用户态与核心态 二 分析及计算(每小题 8 分,共 40 分) 1、 一个有快表的请页式虚存系统,设内存访问周期为 2 微秒,内外存传送一个页面的平均 时间 为 5 毫秒,如果快表命中率为 75%,缺页中断率为 10%。忽略快表访问时间,试求 内存的有 效存取时间。简要分析计算过程 2、 用伪码描述 UNIX 文件系统的空闲块磁盘分配算法 alloc 及释放算法 free? 3、 某系统在 TO 时刻按下表所示分配资源给 5 个进程: 进程 当前已分配(Allocation) 最大需求(Max) 剩余资源(Available) P1 P2 P3 P4 P5 0, 0, 1, 2 1, 0, 0, 0 1, 3, 5, 4 0, 6, 3, 2 0, 0, 1, 4 1, 5, 2, 0 0, 0, 1, 2 1, 7, 5, 0 2, 3, 5, 6 0, 6, 5, 2 0, 6, 5, 6 ⑴ 数组 Need 的内容是什么? ⑵ 该系统处于安全状态吗?若是,给出一安全序列。 ⑶ 若进程 P2 的请求(0, 4, 2, 0)到过,该请求是否能立即满足? 4、假设磁盘共有 200 个柱面,编号从 0-199o 当前磁头在 130 号柱面上服务,并刚刚完成了 105 号柱面的请 求。如果现有进程 Pl、P2、P3 和 P4 分别请求的柱面号为 186, 158, 105, 90。 寻道时每 个柱面移动需要 5mso 计算按下列驱动调度算法调度时的寻道时间: (1) 最短寻道时间优先(SSTF)算法 (2) 电梯调度(SCAN)算法 (3) 循环扫描(C-SCAN)算法 请给出计算过程。 5、在解决读者-写着问题中可使用管程机制,阅读以下有关管程、读者程序、写着程序及主 调程 序的程序描述: Monitor readr-Writer_l { int numberOfReaders=0; int numberOfWriters=0; boolean busy=FALSE; Public: startRead()( while(numberofWriters !=0); numberOfReaders=numberOfReaders+1;};
finishRead()( numberOfReaders=numberOfReaders-1;} start Write()( numberofWriters=numberofWriters+1; while (busy || (numberOfReaders>0)); busy=TRUE; }; finishWrite()( numberofWriters^umberofWriters-1; busy=FALSE;}; }; Reader(){ while(TRUE){ readr-Writer_l .startRead(); readr-Writer_l .finishReadQ; ) } Writer(){ while(TRUE){ readr-Writer_l .startWrite (); readr-Writer_l .finishWrite (); ) Main{ fbrk(writer,O); fdrk(reader,O); } 回答以下问题: 1. 管程机制是解决什么问题的? 2. 如果采用写者优先的调度策略,以上的管程机制会出现死锁现象?说明原因。 3. 如何改写管程保证读者-写者能够正确执行?用伪码描述
分享到:
收藏