2021年东华大学计算机科学与技术学院854计算机及软件工程专业基础综合考研核心题库之数据结构算法设

特别说明

本书根据历年考研大纲要求并结合历年考研真题对该题型进行了整理编写,涵盖了这一考研科目该题型常考试题及重点试题并给出了参考答案,针对性强,考研复习首选资料。

版权声明

青岛掌心博阅电子书依法对本书享有专有著作权,同时我们尊重知识产权,对本电子书部分内容参考和引用的市面上已出版或发行图书及来自互联网等资料的文字、图片、表格数据等资料,均要求注明作者和来源。但由于各种原因,如资料引用时未能联系上作者或者无法确认内容来源等,因而有部分未注明作者或来源,在此对原作者或权利人表示感谢。若使用过程中对本书有任何异议请直接联系我们,我们会在第一时间与您沟通处理。

因编撰此电子书属于首次,加之作者水平和时间所限,书中错漏之处在所难免,恳切希望广大考生读者批评指正。

重要提示

本书由本机构编写组多位高分在读研究生按照考试大纲、真题、指定参考书等公开信息潜心整理编写,仅供考研复习参考,与目标学校及研究生院官方无关,如有侵权请联系我们立即处理。一、2021年东华大学计算机科学与技术学院854计算机及软件工程专业基础综合考研核心题库之数据结构算法设计题精编

1.自由树(即无环连通图)的直径是树中所有点对间最短路径长度的最大值,即T的直径定义为,这里表示顶点u到顶点v的最短路径长度(路径长度为路径中所含的边数)。试写一算法来求T的直径,并分析算法的时间复杂度(时间复杂度越小,得分越高) 【答案】求树的直径的时间复杂度可为,和。

解法一:先调用求所有点对间最短路径算法(每边权值为1),如Floyd算法,然后对指代矩阵求最大的作为直径。

解法二:修改BFS算法,使之遍历时记录当前访问结点的深度(离根的边数),用存在的度为1的结点作起点调用BFS,求出其它非根结点的深度,在各次调用BFS算法中求最大深度,即为树的直径。时间,这里是一次外部调用BFS的运行时间,调用BFS的最多次数(指外部调用)不超过(存储结构为邻接表时)。

解法三:用邻接表作为存储结构依次删去树叶(度为一的结点),将与树叶相连的结点度数减1。设在第一轮删去原树T的所有树叶后,所得树为T1;再依次做第二轮删除,即删除所有T1的叶子;如此反复,若最后剩下一个结点,则树直径应为删除的轮数乘以2。具体算法描述如下:

2.一棵树以孩子兄弟表示法存储,递归算法numberofleaf计算并返回根为r的树中叶子结点的个数(NULL代表空指针)。

【答案】1、

3.已知线性表按顺序存储,且每个元素是不相等的整数。设计一个算法,将所有的奇数移到所有的偶数前面(要求时间最短,辅助空间最少)。

【答案】从左向右找到偶数,从右向左找到奇数,将两者交换,如此反复,直到为止。

4.试写出在含有n个元素的小顶堆中增加一个新元素X,且调整为堆的算法。

【答案】首先,把新元素添加到堆尾部的位置,如果该元素的key值小于其直接祖先结点,则交换该元素与其祖先的位置,一直到该元素不小于其直接祖先或者该元素为根结点为止。算法描述如下:

5.在有序单链表L中插入新结点,使得L仍然有序。

【答案】首先需要确定待插元素在单链表中的位置,可从头指针开始,沿着next指针域向后,将每个结点的元素值与待插元素比较大小,以此确定插入位置,然后为待插元素生成结点插入单链表中。算法描述如下:

6.以正整数序列作为输入数据,当输入数据为0时,表示输入结束。试编写程序,将输入数据按递增顺序用单链表存放并打印该链表。

【答案】算法描述如下:

相关文档
最新文档