考研真题
清华大学97计算机专业考研试题
一、对于一个使用邻接表存储的带权有向图G ,试利用深度优先搜索放法,对该图中所有顶点进
行拓扑排序。若邻接表的数据类型定义为Graph,则算法的首部为:
FUNCTION dfs-toposort(G:Graph):boolean;
若函数返回true,则表示拓扑成功,图中不存在环;若函数返false,则图中存在环,拓扑排
序不成功 。在这个算法中嵌套用一个递归的深度优先搜索算法:
PROCEDURE dfs(G:Graph; V:vtxnum);
在遍历图的同时进行拓扑排序。其中,vtxnum是顶点号
(1)给出该图的邻接表定义; (4分)
(2)定义在算法中使用的全局辅助数组; (4分)
(3)写出拓扑排序的算法。 (10分)
二、设有一头指针为L的带有表结点的非循环双向链表,其每个结点中除有pred(前驱指针),
data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被使用前,其值均
初始化为零。每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值
增1,并使此链表中结点保持按访问频度非增(递减)的顺序排序,同时最近访问的结点排
在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的
Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。 (10分)
三、已知二叉树的链表存储结构定义如下:
TYPEbitreptR=^bitrenode;
bitrenode=RECORD
data:char;
lchild,rchild:butreptr
END;
编写一个递归算法,利用叶结点中空的右链指针域rchild,将所有叶结点自左至右链接成一
个单链表,算法返回最左叶结点的地址(链头)。 (10分)
四、设目标为S=“abcaabbcaaabababaabca”,模是为P=“babab”,
(1)手工计算模式P的nextval数组的值; (5分)
(2)写出利用求得的 nextval数组,按KMP算法对目标S进行模式匹配的过程。 (5分)
五、对于一个对称矩阵采用压缩存储,只存放它的上三角部分,并按列存放。例如对于一个 n*n的对称矩阵A,
考研真题
用一个一维数组B来存放它的上三角部分:
B=[A11,A12,A22,A13,A23,A33,A14。。。。。。。。,A1n,A2n。。。。。。,Ann]
同时有两个函数:MAX(i,j)和MIN(i,j),分别计算下标i和j中的大者与小者。试利用它门给出求任意一个Aij在B中存放位置的公式。(若式中没有MAX(i,j)和MIN(i,j)则不给分)。 (10分)
六、有一棵中序遍历二叉树,如下图(a)所示
d^成为
的A^左孩子,原来A^的左孩子B^变成A^的右孩子C^的左孩子,如图(B)所示 (树中的线索自行画出0。试针对图中的实例写出实现插入的几条语句。
(2)现在想在插入后的中序线索二叉树中删去A^右孩子C^并用C^的左孩子填补原来的c↑的位 置,如图(c)所示。试写出实现删除的几条语句。 ( 15分)
七、设有一组数据black,blue,green,purple,red,white,yellow,它们的查找概率分别为
0.10,0.08,0.12,0.05,0.20,0.25,0.20. 试以它们的查找概率为权值,构造一棵次查找树,并计算其查找成功的平均查找长度。 (12分)
八、设有11个长度(即包含记录个数)不同的归段,它们所包含的记录个数分别为 25,40,16,38,77,64,53,88,9,48,98.
试根据它们做4路平均归并,要求:
(1)指出总的归并趟数; (3分)
(2)构造最佳归并树; (8分)
(3)根据最佳归并树计算每一趟及总的读记录数。 (5分) (a) (b) (C) (1)现要把一棵根指针为d 的中序线索二叉树插在另一棵中序先索二叉树中,使