数据结构考研总结.docx
《数据结构考研总结.docx》由会员分享,可在线阅读,更多相关《数据结构考研总结.docx(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构考研总结考察目标1 .掌握数据结构的基本概念、基本原理和基本方法。2 .掌握数据的逻辑结构、存储结构及基本操作的实 现,能够对算法进行基本的时间复杂度与空间复杂度的分析。3 .能够运用数据结构的基本原理和方法进行问题的 分析与求解;具备采用C、C+或Java语言设计与实现算法的能力。第2章线性表一、考研知识点线性表的定义和基本操作线性表的实现1 .顺序存储2 .链式存储3 .线性表的应用二、考查重点1 .线性结构的特点;2 .线性表在顺序存储及链式存储方式下的基本操作及 其应用;3 .线性表的顺序存储及链式存储情况下,其不同和优 缺点比较,及其各自适用的场合。单链表中设置头指针、循环链
2、表中设置尾指针而不设 置头指针的各自好处;4 .能分析所写算法的时间和空间复杂度。分析:线性表是一种最简单的数据结构,在线性表方面,主 要考查线性表的定义和基本操作、线性表的实现。在线性表实现方面,要掌握的是线性 表的存储结构,包括顺序存储结构和链式存储结构,特别是链式存储结构,是考查的重点。 另外,还要掌握线性表的基本应用。线性表一章在线性结构的学习乃至整个数据结构学科 的学习中,其作用都是不可低估的。线性表一章小的知识点比较少,一般会出一个综 合题,并且容易和第三章、第九章和第十章的内容结合来考,注意对基本知识的理解,能够 利用书上的理论解决具体问题。学习过程中要注意多积累,多看、多写一些
3、相关算法。三、考研真题选择题近几年第2章没有考选择题,只有两个计算时间复杂 度的题目,因为此章主要是线性表的操作,而且又是这门课的一个基础,考综合题的可能性比较大,可以和第3章、第9章和第10章的内容结合来出题。1 .设n是描述问题规模的非负整数,下面程序片段的 时间复杂度是。x=2;while x=2*x; A. 0 B. 0 C. 0 D. 02 .求整数n的阶乘的算法如下,其时间复杂度是。int factif return 1;return n*fact;)A. o B. 0 C. 0 D. 0分析:考查的是算法时间复杂度的计算。可以放在第 二章,实际这内容贯穿每一章内容中算法的度量。综
4、合题1 .已知一个带有表头结点的单链表结点结构为,假设 该链表只给出了头指针list。在不改变链表的前提下,请设计一 个尽可能高效的算法,查找链表中倒数第k个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。要求:描述算法的基本设计思想;描述算法的详细实现步骤;根据设计思想和实现步骤,采用程序设计语言描述算 法,关键之处给出简要注释。分析:此题考查线性表的链式存储,主要是线性表的 基本操作的应用。做此题时要把握算法的效率。算法基本思想如下:从头到尾遍历单链表,并用指针P 指向当前结点的前k个结点。当遍历到链表的最后一个结点时,指针P所指向 的结点即为所查找的结点。
5、详细实现步骤:增加两个指针变量和一个整型变量, 从链表头向后遍历,其中指针pl指向当前遍历的结点,指针P指向pl所指向结 点的前k个结点,如果pl之前没有k个结点,那么P指向表头结点。用整型变量i表示当 前遍历了多少结点,当ik时,指针p随着每次遍历,也向前移动一个结点。当遍历完成时, P或者指向表头结点,或者指向链表中倒数第k个位置上的结点。算法描述:int locatepl=:list-link;p=list;i=l ;while(pl=pl-link;i+;ifp=p-next;如果ik,则p也后移ifreturn 0;链表没有k个结点else(printf;return 1;)2 .设
6、将n个整数存放到一维数组R中,试设计一个在 时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移P个位置,即将R中的数据由变换为要求:给出算法的基本设计思想。根据设计思想,采用C或C+或JAVA语言表述算法, 关键之处给出注释。说明你所设计算法的时间复杂度和空间复杂度分析:此题考查的是数组的操作,线性表的顺序存储 的核心就是数组,因此此题实质上是考查的线性表的顺序存 储的操作及其应用。做此题时要考虑算法的时间和空间复杂 度。解法一:算法的基本设计思想:可以将这个问题看做是把数组 ab转化成数组ba,先将a逆置得到ab,再将b逆置得到ab,最后将整个ab逆置得到二ba。 设reverse函
7、数执行将数组元素逆置的操作,对abcdefgh 向左循环移动3个位置的过程如下:reverse 得至!J cbadefgh;reverse 得至!J cbahgfde;reverse 得至!J defghabco注:reverse中,两个参数分别表示数组中待转换元素 的始末位置。算法描述:void reverse将数组中从low到high的元素逆置int temp;for/2;i+)temp=RElow+i;R10ow+i=Rhigh-i;Rhigh-i=temp;)void conversereverse;reverse;reverse;)上述算法中三个reverse函数的时间复杂度分别是0
8、、 0/2)、0,故所设计算法的时间复杂度为0,空间复杂度为0。解法二:算法思想:创建大小为p的辅助数组S,将R中前p个 整数依次暂存在S中,同时将R中后n-p个整数左移,然后 将S中暂存的p个数依次放回到R中的后续单元。时间复杂度为0,空间复杂度为0。3 . 一个长度为L的生序列S,处在第厂L/21个位置的 数称为S的中位数,例如,若序列Sl=,则S1的中位数是 15,两个序列的中位数是含它们所有元素的升序序列的中位 数。例如,若S2=,则S1和S2的中位数是11。现在有两个 等长升序序列A和B,试设计一个在时间和空间方面都尽可 能高效的算法,找出两个序列A和B的中位数。要求:给出算法的基本
9、设计思想。根据设计思想,采用C或C+或JAVA语言描述算法, 关键之处给出注释。分析:此题考查线性表的顺序存储, 主要是线性表的基本操作的应用。做此题时要把握T算法的效率。算法的基本设计思想如下:分别求出序列A和B的中位数,设为a和b,求序歹U A 和B的中位数过程如下:1)若a=b,则a或b即为所求中位数,算法结束;2)若a 3)若ab,则舍弃序列A中较大的一半, 同时舍弃序列B中较小的一半,要求舍弃的长度相等;在保留的两个升序序列中,重复过程1) -3),直到两 个序列中只含一个元素时为止,较小者即为所求的中位数。算法实现如下:int Msearchint sl=O, dl=n-l, ml
10、, s2=0, d2=n-l, m2;分别表示序列A和B的首位数、末尾数和中位数Whileml=/2;m2=/2;if return Aml;else ifif%2=0sl=ml;d2=m2;elsesl=ml+l;d2=m2;elseif%2=0dl=ml;s2=m2;elsedl=ml+l;s2=m2;)return Asl 算法的时间复杂度为0,空间复杂度为0。4.假定采用带头结点的单链表,如果有共同 后缀,长度分别为lenl和len2,则可共享相同的后缀存储 空间,例如,loading”和“Beijing,如下图所示。设strl和str2分别指向两个单词所在单链表的头结 点,链表结点结
11、构为,请设计一个时间上尽可能高效的算法, 找出由strl和str2所指向两个链表共同后缀的起始位置。要求:给出算法的基本设计思想。根据设计思想,采用C或C+或JAVA语言描述算法, 关键之处给出注释。说明你所设计算法的时间复杂度。分析:两个单链表有公共结点,则从公共结点开始, 它们的next都指向同一个结点。由于每个单链表结点只有 一个next域,因此,从第一个公共结点开始,之后它们所 有的结点都是重合的,不可能再出现分叉。因此,我们判断 两个链表是不是有重合的部分,只要分别遍历两个链表到最 后一个结点。如果两个尾结点是一样的,说明它们有公共结 点;否则两个链表没有公共的结点。因为两个链表长度
12、不一定一样,在顺序遍历两个链表 到尾结点时,并不能保证在两个链表上同时到达尾结点。假 设一个链表比另一个长k个结点,我们先在长的链表上遍历 k个结点,之后再同步遍历,此时能够保证同时到达最后一 个结点。在遍历中,第一个相同的结点就是第一个公共结点。算法思想:根据两个单链表的长度,求出它们的长度 之差;在长的单链表上先遍历长度之差个结点;同步遍历两 个单链表,直接找到相同的结点,若有相同结点返回该节点, 若没有则一直到链表结束。算法实现:LinkList searchiflong=strl-next; short=str2-next;k=lenl-len2;else long=str2-next
13、; short=strl-next;k=len2-lenl;while long=long-next; k一;whileif return long;else long=long-next; short=short-next;)return NULL;)由于每个表仅遍历一遍,因此算法时间复杂度为0,空间复杂度为0o四、练习题选择题1 .下述哪一条是顺序存储结构的优点?A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示2 .下面关于线性表的叙述中,错误的是哪一个?A.线性表采用顺序存储,必须占用一片连续的存储单 y L o8 .线性表采用顺序存储,便于进行插入和
14、删除操作。C.线性表采用链接存储,不必占用一片连续的存储单 yL oD.线性表采用链接存储,便于插入和删除操作。9 .线性表是具有n个的有限序列。A.表元素 B.字符 C.数据元素 D.数 据项 E.信息项10 若某线性表最常用的操作是存取任一指定序号的元 素和在最后进行插入和删除运算,则利用存储方式最节省时 间。/从2016年计算机考研大纲来看,考研数据结构基本概 念的理解是重点,只有深刻理解基本概念,才能认真思考。 提示:常考的点是基本概念的应用,数据结构的选择题主要 是利用基本概念的运算,而大题则是多种基本数据结构上基 本运算的叠加,数据结构陷阱重重,经过以下6个地方千万 要注意。栈、队
15、列和数组时数据结构的重要工具,考查重点偏 向于应用。对于具体的定义的方式简单清楚就可以,重点是 理解栈、队列的特点,熟练掌握栈、队列的一些经典的应用, 在应用题中,常常会用到栈、队列数组作为工具。树是数据结构最重要的部分,它的内容纷繁而复杂, 但又尤为重要,是复习的重中之重。对于树的复习方法,要 重点掌握树的遍历,树的任何操作,其实都是以遍历为基础, 稍加改动visit函数而已。图的概念比较多,没有基本概念的基础,是很难把知 识掌握清楚的。对于图,是承接着树而衍生出来的,在实际 应用中,图更为广泛。所有问题都是化未知为已知,解决图 的问题,很多时候是借助树和二叉树来实现的,应注意树、 二叉树和
16、图之间的对应关系。考研复习中,图无疑是另一个 重点,此部分出大题的可能性很高。要重视有人名来命名的 算法,这类算法是为了纪念作者而命名的,可见其经典性, 这类算法也相当有难度,考试时,仅仅只会就此算法稍加改 动,或应用算法的思想来命题。线性表部分由于比较简单,又是整个数据结构的基础, 所以考察的内容会比较细致。对于线性表灵活运用的程度要 求较高。复习时,应充分理解线性表的顺序存储,链式存储。熟练掌握初始化、插入、删除等基本操作。此部分,有可能 出大题的地方:集合求并、一元多项式求和。内部排序会出选择题,重点考察的并不是排序的具体 实现算法,而是排序的过程,每次排序的结果都要清楚,每 种排序的特
17、点都要明白,这都是选择题考察的侧重点,排序 同时也会应用在综合题中,适当的“记忆”算法,重点还是 理解排序算法的过程和思想。外部排序了解概念,对知识点 的结论清晰。查找会出选择题,但是查找的思想会融入在排序里考 察,也就是说查找是排序的基础,对于此部分要注重理解算 法的思想,重点放在常用算法的实现。数据结构考研真题及知识点解析考察目标1 .理解数据结构的基本概念、基本原理和基本方法。2 .掌握数据的逻辑结构、存储结构及基本操作的实 现,能够对算法进行基本的时间复杂度与空间复杂度的分析。3 .能够运用数据结构的基本原理和方法进行问题的 分析与求解,具备采用C、C+或Java语言设计与实现算法的能
18、力。第2章线性表一、考研知识点线性表的定义和基本操作线性表的实现1 .顺序存储2 .链式存储3 .线性表的应用二、考研真题选择题近两年第2章没有考选择题,因为此章主要是线性表 的操作,而且又是这门课的一个基础,考综合题的可能性比较大,而且可以和第3章、 第9章和第10章的内容结合来出题。1.设n是描述问题规模的非负整数,下面程序片段的 时间复杂度是。x=2;while x=2*x;2A. 0 B. 0 C. 0 D. 0分析:答案是A,此题考查的是算法时间复杂度的计算。 可以放在第二章,实际这内容贯穿每一章内容中算法的度量。综合题1 .已知一个带有表头结点的单链表结点结构为,假设 该链表只给出
19、了头指针list。在不改变链表的前提下,请设计一 个尽可能高效的算法,查找链表中倒数第k个位置上的结点。若查找成功,算法输出该结 点的data值,并返回1;否则,只返回0。要求:描述算法的基本设计思想;描述算法的详细实现步骤;根据设计思想和实现步骤,采用程序设计语言描述算 法,关键之处给出简要注释。分析:此题考查线性表的链式 存储,主要是线性表的基本操作的应用。做此题时要把握算法的效率。算法基本思想如下:从头到尾遍历单链表,并用指针P 指向当前结点的前k个结点。当遍历到链表的最后一个结点时,指针P所指向 的结点即为所查找的结点。详细实现步骤:增加两个指针变量和一个整型变量, 从链表头向后遍历,
20、其中指针pl指向当前遍历的结点,指针P指向pl所指向结 点的前k个结点,如果pl之前没有k个结点,那么p指向表头结点。用整型变量i表示当 前遍历了多少结点,当ik时,指针p随着每次遍历,也向前移动一个结点。当遍历完成时,P或者指向表头结点,或者指向链表中倒数第k个位置上的结点。算法描述:int locatepl=list-link;p=list;i=l;whilepl=pl-link;i+;ifp=p-next;如果ik,则p也后移)ifreturn 0;链表没有k个结点elseprintf;return 1;2 .设将n个整数存放到一维数组R中,试设计一个在 时间和空间两方面尽可能有效的算法
21、,将R中保有的序列循 环左移P个位置,即将R中的数据由变换为要求:给出算法的基本设计思想。根据设计思想,采用C或C+或JAVA语言表述算法, 关键之处给出注释。说明你所设计算法的时间复杂度和空间复杂度分析:此题考查的是数组的操作,线性表的顺序存储 的核心就是数组,因此此题实质上是考查的线性表的顺序存 储的操作及其应用。做此题时要考虑算法的时间和空间复杂 度。解法一:算法的基本设计思想:可以将这个问题看做是把数组 ab转化成数组ba,先将a逆置得到ab,再将b逆置得到ab,最后将整个ab逆置得到二ba。 设reverse函数执行将数组元素逆置的操作,对abcdefgh 向左循环移动3个位置的过程
22、如下:reverse 得至!J cbadefgh;reverse 得至!J cbahgfde;reverse 得至!J defghabco注:reverse中,两个参数分别表示数组中待转换元素 的始末位置。算法描述:void reverse将数组中从low到high的元素逆置int temp;for/2;i+)temp=RElow+i;R10ow+i=Rhigh-i;Rhigh-i=temp;)void conversereverse;reverse;reverse;)上述算法中三个reverse函数的时间复杂度分别是0、 0/2)、0,故所设计算法的时间复杂度为0,空间复杂度为0。解法二:算
23、法思想:创建大小为p的辅助数组S,将R中前p个 整数依次暂存在S中,同时将R中后n-p个整数左移,然后 将S中暂存的p个数依次放回到R中的后续单元。时间复杂度为0,空间复杂度为0。3. 一个长度为L的生序列S,处在第厂L/21个位置的 数称为S的中位数,例如,若序列Sl=,则S1的中位数是 15,两个序列的中位数是含它们所有元素的升序序列的中位 数。例如,若S2=,则S1和S2的中位数是11。现在有两个 等长升序序列A和B,试设计一个在时间和空间方面都尽可 能高效的算法,找出两个序列A和B的中位数。要求:给出算法的基本设计思想。根据设计思想,采用C或C+或JAVA语言描述算法, 关键之处给出注
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 考研 总结
限制150内