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

2018年北京市培养单位遥感与数字地球研究所862计算机学科综合(非专业)之数据结构考研强化五套模拟题

  摘要

一、算法设计题

1. 试编写在带头结点的单链表中删除(一个) 最小值结点的(高效) 算法。delete(Linklist&L)

【答案】算法如下:

//L是带头结点的单链表,本算法删除其最小值结点

//P为工作指针。指向恃处理的结点。假定链表非空

//pre指向最小值结点的前驱

//q指向最小值结点,初始假定第一元素结点是最小值结点

//查最小值结点

//指针后移

//从链表上刪除最小值结点

//释放最小值结点空间

//结束算法Delete

2. 设给定关键字输入序列为(100,90,120,60,78,35,42,31,15) 用哈希法散列0-10的地址区间。要求设计一合理的哈希函数;冲突时用链表法解决,写出哈希算法,并构造出哈希表,在等概率查找情况下查找成功的平均查找长度是多少?

【答案】算法如下:

关键字

链指针

用链地址法解决冲突,构造哈希表,哈希函数用

初始化

输入n(本例中n=9)

个关键字按题意x 互不相同

第 2 页,共 42 页

4等插入结点链入同义词表

构造的哈希表如图所示:

图构造的哈希表

查找成功时的平均查找长度

3. 以顺序存储结构表示串,设计算法。求串S 中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。

【答案】算法如下:

//串用一维数组s 存储,本算法求最长重复子串,返回其长度

//index记最长的串在s 串中的开始位置,max

记其长度

//length记局部重复子串长度,i 为字符数组下标

//上一个重复子串结束

//当前重复子串长

度大,则更新

max

//初始化下一重复子串的起始位置和长度

(”最长重复子串的长度为

.//算法结束

第 3 页,共 42 页

,在串中的位置,max ,index) ;

时间复杂度:算法的时间复杂度为O(n),每个字符与其后继比较一次。

4. 有二叉排序树采用二叉链表方式存放,树中结点值各不相同,欲得到一个由大到小的结点值递减序列,简述处理方法思路,用非递归形式写出算法。

【答案】算法如下:

按递减次序输出二叉排序树结点的值

是元素为二叉树结点指针的栈,容量足够大

沿右子树向下

结束

5. 设稀疏矩阵中有t 个非零元素,用三元组顺序表的方式存储。请设计一个算法,计算矩阵M 的转置矩阵N ,要求转置算法的时间复杂度为0(n+t) 。

【答案】算法如下:

//采用三元组表方式存储,按列序实现矩阵的转置

//行数、列数和非零元素个数

//设置N 中第一个非零元素从下标1开始存储

//按列,共

//在//转置

//三元组表上实现矩阵的快速转置的算法

//矩阵M 每一列非零元初始化为零

//求矩阵M 每一列的非

零元个数

//第1列第一个非零元在转置后的三元组中下标是

1

//求

第j 列第一个非零元在

中的序号

个元素中查找

//求转置矩阵N 的三元组表

第 4 页,共 42 页