2016年考研核心题型【数据结构部分】【第1章 算法的时间复杂度和空间复杂度】
智慧树知到《数据结构》章节测试答案

第1章单元测试1、算法的时间复杂度取决于___。
答案:A和B2、数据在计算机内存中的表示是指()答案:数据的存储结构3、算法指的是()答案:求解特定问题的指令有限序列4、在数据结构中,与所使用的计算机无关的数据结构是()答案:逻辑7、某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为( )。
答案:1448、算法能正确地实现预定功能的特性称为算法的()。
答案:正确性第2章单元测试1、链表不具备的特点是()。
答案:可随机访问任意一个结点3、线性表的顺序存储表示优于链式存储表示。
答案:错4、顺序存储结构的缺点是不便于修改,插入和删除需要移动很多结点。
答案:对5、在设头、尾指针的单链表中,与长度n有关的操作是( )。
答案:删除最后一个结点6、设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B间插入结点X的操作序列为( )。
答案:q->next=s; s->next=p;7、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )。
答案:用尾指针表示的循环单链表8、在一个单链表中,若p所指节点不是最后节点,在p之后插入s所指节点,则执行( )。
答案:s->link=p->link;p->link=s;9、在双向链表存储结构中,删除p所指的结点时须修改指针____。
答案:p->next->prior=p->prior; p->prior->next=p->next;10、若事先不知道线性表的长度,则处理线性表时较好的存储结构是( )。
答案:单链表11、向一个有127个元素的顺序表中插入一个新元素并保存,原来顺序不变,平均要移动( )个元素。
答案:63.512、某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为( )。
数据结构时间复杂度总结

数据结构时间复杂度总结在计算机程序设计中,数据结构是一种用来组织和存储数据的方式,它可以使数据的访问、插入、删除等操作更加高效。
而在进行数据结构的设计和实现时,时间复杂度是一个非常重要的指标,它可以衡量程序的性能和效率。
因此,本文将对常见的数据结构进行时间复杂度总结。
一、数组数组是一种最基本的数据结构,它可以存储相同类型的数据,并且可以通过下标来访问数组中的元素。
在数组中,访问元素的时间复杂度为O(1),插入和删除的时间复杂度为O(n)。
二、链表链表是一种线性的数据结构,它由多个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
在链表中,访问元素的时间复杂度为O(n),插入和删除的时间复杂度为O(1)。
三、栈栈是一种数据结构,它可以存储相同类型的数据,并且只能在栈顶进行插入和删除操作。
在栈中,访问栈顶元素的时间复杂度为O(1),插入和删除的时间复杂度也为O(1)。
四、队列队列是一种线性的数据结构,它可以存储相同类型的数据,并且只能在队尾进行插入操作,在队首进行删除操作。
在队列中,访问队首元素的时间复杂度为O(1),插入和删除的时间复杂度也为O(1)。
五、堆堆是一种特殊的树形数据结构,它可以快速找到最大或最小元素,并且可以在O(log n)的时间复杂度内插入和删除元素。
六、哈希表哈希表是一种使用哈希函数将键映射到值的数据结构,它可以在O(1)的时间复杂度内进行插入、删除和查找操作。
七、树树是一种类似于链表的数据结构,它由多个节点组成,每个节点包含一个数据元素和多个指向子节点的指针。
在树中,访问节点的时间复杂度为O(n),插入和删除的时间复杂度为O(log n)。
综上所述,不同的数据结构在访问、插入和删除操作上都有不同的时间复杂度,我们在进行程序设计时需要根据实际情况选择合适的数据结构以及相应的算法,以达到最优的程序性能和效率。
数据结构时间复杂度的计算

数据结构时间复杂度的计算数据结构的时间复杂度是衡量算法性能的重要指标,它描述了算法执行所需的时间随输入规模增长而变化的规律。
在计算时间复杂度时,我们通常关注最坏情况下算法的执行时间。
以下是常见数据结构的时间复杂度计算方法及其分析:1. 数组(Array):-访问指定位置的元素:O(1)-查找指定元素:O(n)-插入或删除元素:O(n)数组的访问和插入/删除元素的时间复杂度取决于元素的位置。
如果位置已知,访问和插入/删除元素的时间复杂度为常数;但如果需要查找元素的位置,时间复杂度为线性。
2. 链表(Linked List):-插入或删除头节点:O(1)-插入或删除尾节点:O(n)-查找指定元素:O(n)链表的插入/删除头节点和访问指定元素的时间复杂度为常数,而插入/删除尾节点的时间复杂度为线性。
3. 栈(Stack):-入栈:O(1)-出栈:O(1)-查看栈顶元素:O(1)栈的操作都是在栈顶进行,因此时间复杂度都为常数。
4. 队列(Queue):-入队:O(1)-出队:O(1)-查看队首元素:O(1)队列操作也都是在固定的位置进行,所以时间复杂度为常数。
5. 哈希表(Hash Table):-插入或删除元素:O(1)-查找指定元素:O(1)(平均情况),O(n)(最坏情况)哈希表的插入/删除操作的平均时间复杂度为常数,但在最坏情况下,哈希冲突可能导致查找元素的时间复杂度变为线性。
6. 二叉树(Binary Tree):- 查找指定元素:O(log n)(平均情况),O(n)(最坏情况)- 插入或删除节点:O(log n)(平均情况),O(n)(最坏情况)二叉树的查找、插入和删除涉及到对树的遍历,所以时间复杂度与树的深度相关。
在平衡二叉树中,树的深度是对数级的;但在非平衡二叉树中,最坏情况下时间复杂度可能退化为线性。
7. 堆(Heap):- 插入元素:O(log n)- 删除堆顶元素:O(log n)-查找堆中最大/最小元素:O(1)堆的插入和删除操作需要对堆进行调整以保持其性质,时间复杂度与堆的高度有关,因此为对数级。
数据结构习题讲述

《数据结构》习题第一章绪论一、单选或填空题1. 下列程序段中S语句的执行频度为。
for(i=0;i<n;i++ )for(j=0;j<i;j++ )S;2. 下列算法的时间复杂度是()。
for(i=0;i<n;i++ )c[i]=i;3. 算法的时间复杂度可表示为O(1)、线性阶、平方阶O(n2)、对数阶O(logn)和指数阶O(2n)等。
4 以下关于数据结构的基本概念中,叙述正确的是A) 数据元素是数据不可分割的最小单位。
B) 数据是数据对象的子集。
C) 数据元素之间的关系在计算机中可用顺序映像和非顺序映像两种不同的方法表示。
D) 数据结构在计算机中的表示又称为逻辑结构。
5. 在数据结构中,数据的逻辑结构包括()。
A) 线性结构和非线性结构B) 逻辑结构和物理结构C) 顺序结构和链式结构D) 虚拟结构和抽象结构6. 在数据结构中,数据的存储结构包括。
A) 线性结构和非线性结构B)逻辑结构和物理结构C) 顺序结构和链式结构D) 虚拟结构和抽象结构第二章线性表1.线性结构的数据元素之间存在一种( )。
A.一对多关系B.多对多关系C.多对一关系D.一对一关系2. 在长度为n的顺序表中插入一个元素,需要平均移动个元素。
A) n/2 B)nC) n(n-1) D) n(n+1)3. 在有n个元素的顺序表中做插入、删除运算,平均时间复杂度为。
4. 顺序表中逻辑上相邻的元素物理位置相邻,单链表中逻辑上相邻的元素的物理位置相邻。
A)必然、必然B)必然、不一定C)不一定、必然D)不一定、不一定5.相对于顺序存储而言,链式存储的优点是()。
A.随机存取B.节约空间C.增、删操作方便D.节点间关系简单6. 以下关于头结点的描述中,叙述错误..的是A) 头结点是对链表首元结点的别称B) 若链表中附设头结点,则头指针一定不为空C) 头结点中不存储链表的数据元素,而是一些诸如表长之类的辅助信息D) 在单链表中附设头结点,插入或删除首元素时不必进行特殊处理7.已知L是无表头结点的单链表,且P所指结点既不是首元结点,也不是尾元结点,则在P之后插入S所指结点,则执行()。
2016年考研核心题型【数据结构部分】【第7章 排序】

温馨提示:快速排序主要考查两点:1、快速排序算法的特点;2、快速排序算法实现; 3、快速排序的过程或者一趟排序的结果。本考点历年考查很多,是复习的重点,请同学们 务必掌握。
接插入排序每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍
然有序。
折半插入排序是对直接插入排序算法的一种改进。由于前半部分为已排好序的数列,
这样我们可以不用按顺序依次寻找插入点,而是采用折半查找的方法来加快寻找插入点的
速度。折半查找的方法来寻找插入位置,可以减少比较次数。但不影响排序的趟数(仍然
本题只剩下希尔排序了,事实上,本题是利用增量为 d=5、3、1 来对关键字{50 , 26 , 38 , 80 , 70 , 90 , 8 , 30 , 40 , 20 }进行希尔排序。其排序过程如图 7.2 所示。
我方慎重声明,各盈利机构若采用我方资料,必追究法律责任
102
2016 年考研核心考点命题思路解密 数据结构 梦享团队主编
1. 对一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是
(
)。
A. 排序的总趟数
B. 元素的移动次数
C. 使用辅助空间的数量
D. 元素之间的比较次数
【2012 年统考——第 11 题】
【考查内容】直接插入排序和折半插入排序的区别。
【解析】所谓排序算法过程,就是不断的依次将元素插入前面已排好序的序列中。直
一趟冒泡排序结束。
整个排序过程如下图所示。
其过程如图 7.1 所示。
50 40 95 20 15 70 60 45 80
50>40,50和40交换
40 50 95 20 15 70 60 45 80
数据结构考试题库(含参考答案) (2)

第1章绪论一、选择题1. 算法的计算量的大小称为计算的()。
【北京邮电大学2000 二、3 (20/8分)】A.效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于()【中科院计算所1998 二、1 (2分)】A.问题的规模 B. 待处理数据的初态 C. A和B3.计算机算法指的是(1),它必须具备(2)这三个特性。
(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性【南京理工大学1999 一、1(2分)【武汉交通科技大学1996 一、1(4分)】4.一个算法应该是()。
【中山大学1998 二、1(2分)】A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C.5. 下面关于算法说法错误的是()【南京理工大学2000 一、1(1.5分)】A.算法最终必须由计算机程序实现B. 为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的6. 下面说法错误的是()【南京理工大学2000 一、2 (1.5分)】(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)7.从逻辑上可以把数据结构分为()两大类。
【武汉交通科技大学1996 一、4(2分)】A.动态结构、静态结构B.顺序结构、链式结构C.线性结构、非线性结构D.初等结构、构造型结构8.以下与数据的存储结构无关的术语是()。
【北方交通大学2000 二、1(2分)】A.循环队列 B. 链表 C. 哈希表 D. 栈9.以下数据结构中,哪一个是线性结构()?【北方交通大学2001 一、1(2分)】A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串10.以下那一个术语与数据的存储结构无关?()【北方交通大学2001 一、2(2分)】A.栈 B. 哈希表 C. 线索树 D. 双向链表11.在下面的程序段中,对x的赋值语句的频度为()【北京工商大学2001 一、10(3分)】FOR i:=1 TO n DOFOR j:=1 TO n DOx:=x+1;A.O(2n) B.O(n) C.O(n2) D.O (log2n)12.程序段FOR i:=n-1 DOWNTO 1 DOFOR j:=1 TO i DOIF A[j]>A[j+1]THEN A[j]与A[j+1]对换;其中n为正整数,则最后一行的语句频度在最坏情况下是()A. O(n)B. O(nlogn)C. O(n3)D. O(n2) 【南京理工大学1998一、1(2分)】13.以下哪个数据结构不是多型数据类型()【中山大学1999 一、3(1分)】A.栈B.广义表C.有向图D.字符串14.以下数据结构中,()是非线性数据结构【中山大学1999 一、4】A.树B.字符串C.队D.栈15. 下列数据中,()是非线性数据结构。
第一章数据结构和算法简介—算法的时间复杂度和空间复杂度-总结

第⼀章数据结构和算法简介—算法的时间复杂度和空间复杂度-总结算法的时间复杂度和空间复杂度-总结通常,对于⼀个给定的算法,我们要做两项分析。
第⼀是从数学上证明算法的正确性,这⼀步主要⽤到形式化证明的⽅法及相关推理模式,如循环不变式、数学归纳法等。
⽽在证明算法是正确的基础上,第⼆部就是分析算法的时间复杂度。
算法的时间复杂度反映了程序执⾏时间随输⼊规模增长⽽增长的量级,在很⼤程度上能很好反映出算法的优劣与否。
因此,作为程序员,掌握基本的算法时间复杂度分析⽅法是很有必要的。
算法执⾏时间需通过依据该算法编制的程序在计算机上运⾏时所消耗的时间来度量。
⽽度量⼀个程序的执⾏时间通常有两种⽅法。
⼀、事后统计的⽅法这种⽅法可⾏,但不是⼀个好的⽅法。
该⽅法有两个缺陷:⼀是要想对设计的算法的运⾏性能进⾏评测,必须先依据算法编制相应的程序并实际运⾏;⼆是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本⾝的优势。
⼆、事前分析估算的⽅法因事后统计⽅法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本⾝的优劣。
因此⼈们常常采⽤事前分析估算的⽅法。
在编写程序前,依据统计⽅法对算法进⾏估算。
⼀个⽤⾼级语⾔编写的程序在计算机上运⾏时所消耗的时间取决于下列因素:(1). 算法采⽤的策略、⽅法;(2). 编译产⽣的代码质量;(3). 问题的输⼊规模;(4). 机器执⾏指令的速度。
⼀个算法是由控制结构(顺序、分⽀和循环3种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果。
为了便于⽐较同⼀个问题的不同算法,通常的做法是,从算法中选取⼀种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作的重复执⾏的次数作为算法的时间量度。
1、时间复杂度(1)时间频度⼀个算法执⾏所耗费的时间,从理论上是不能算出来的,必须上机运⾏测试才能知道。
但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。
数据结构时间复杂度总汇

数据结构时间复杂度总汇数据结构时间复杂度总汇一、线性结构1.数组(Array)- 查找:O(1)- 插入:O(n)- 删除:O(n)2.链表(Linked List)- 查找:O(n)- 插入:O(1)- 删除:O(1)3.栈(Stack)- 查找:O(n)- 插入:O(1)- 删除:O(1)4.队列(Queue)- 查找:O(n)- 插入:O(1)- 删除:O(1)二、树形结构1.二叉树(Binary Tree)- 查找:O(log n) - O(n)- 插入:O(log n) - O(n)- 删除:O(log n) - O(n)2.二叉搜索树(Binary Search Tree)- 查找:O(log n) - O(n)- 插入:O(log n) - O(n)- 删除:O(log n) - O(n)3.平衡二叉树(Balanced Binary Tree)- AVL树:查找、插入、删除均为 O(log n) - 红黑树:查找、插入、删除均为 O(log n) 4.堆(Heap)- 查找:O(n)- 插入:O(log n)- 删除:O(log n)三、散列表(Hash Table)- 查找:平均 O(1),最坏 O(n)- 插入:平均 O(1),最坏 O(n)- 删除:平均 O(1),最坏 O(n)四、图(Graph)- 邻接矩阵:查找、插入、删除均为 O(1)- 邻接表:查找 O(log n) - O(n),插入 O(1),删除O(log n) - O(n)附件:本文档未涉及附件。
法律名词及注释:1.时间复杂度(Time Complexity):描述算法在解决问题时所需的计算时间。
2.数组(Array):由相同数据类型的元素按照一定顺序排列而成的数据结构。
3.链表(Linked List):由一系列节点(Node)组成的数据结构,每个节点包含数据和指向下一个节点的指针。
4.栈(Stack):一种特殊的线性表,只能在表尾进行插入和删除操作的数据结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
梦享考研系列2016年考研核心考点命题思路解密统考408核心题型梦享团队组编内容简介《2016年考研核心考点命题思路解密统考408核心题型》严格按照最新计算机考研408统考大纲编写,并精心将考研大纲细分成考点,有利于408统考和自主命题高校的考生抓住重点,着重训练。
本书每一个考点中的命题,绝大部分来源于历年名校计算机考研真题和408统考真题,少部分来源名校期末考试试题中的精华部分,是全国408统考大纲和高校考研真题的较好结合。
为了提高考题的质量和解析的准确度,参考资料采用以考研权威教材、习题、考研真题为主,多方借鉴众多高校从事多年教育的教师课堂资料。
梦享团队对每一个命题的思路和解题方法进行深入详细地讲解,并附上大量的图来帮助考生理解记忆,力求考生能够通过掌握一个题目而达到举一反三,有利于考生利用更少的时间掌握更多的知识。
本书可作为考生参加计算机专业研究生入学考试的备考复习用书,也可作为计算机专业的学生的习题集。
前言梦享团队成立于2013年10月份,目前共有31人,队员以中科院、清华大学和北京交通大学3所高校的学生为主,其他名校学生为辅,都是上研不久的研究生,以及一些考研论坛上参与答疑多年的版主等。
在考研复习和辅导上,梦享团队队员有着相对丰富的阅历。
在考研的路上,梦享团队队员也经历过和大家一样的坎坷辛苦。
我们深切地体会到,每一个考研的同学十分不容易。
计算机专业考研的命题,侧重于考查同学们对基础知识的掌握,考研书更应该侧重于培养同学们的实战能力。
但目前的考研教材绝大多数倾向于知识点的讲解,不注重培养考生的实战能力,导致很多考生知识很丰富,但是很难这些知识很好地运用于解题。
编写偏向于实战的参考书不同于知识讲解,需要编者花费大量的时间来规划和布置章节、考点和解析考题。
目前能找到的计算机考研命题解析类参考资料,要么题目特别少但讲解特别详细啰嗦,要么题目太多的而对命题的讲解十分粗略甚至只有一个最终答案。
因而,梦享团队决定写一套注重实战、解析详细、直击重点、严格参考大纲的参考书。
经过两年多的努力,“梦享考研系列”参考书终于一本一本地和大家见面了,到目前为止,我们总共有5本图书已经出版。
其中,《计算机网络》完成于2013年10月,《数据结构》完成于2014年3月,《计算机操作系统》完成于2014年9月,《计算机组成原理》完成于2015年3月。
最后一本书,也就是本书,初稿完成于2015年5月。
为了提高图书的权威性,本套图书严格按照408统考大纲编写,涵盖了统考大纲所有指定的内容,并融合了统考真题和历年名校考研真题的精华,是全国408统考大纲、统考真题和高校考研真题的较好结合。
为了提高考题的质量和解析的准确度,参考资料采用以考研权威教材、习题、考研真题为主,多方借鉴众多高校从事多年教育的教师课堂资料。
本套图书具有以下特色:1. 组织严谨,结构清晰梦享考研系列图书通过对统考大纲和历年高校考研真题的深入剖析和总结,精心规划和部署了各个章节,对每一个章节的考点作了独家策划,使得本套图书组织严谨,结构清晰,便于考生对各章考点逐个击破。
2.突出重点,注重实战对于每一个计算机专业的考研同学而言,复习任务是相当繁重的。
除了四门统考专业课之外,还有数学、英语和政治。
所以,突出重点,让同学们把极其有限的时间都花在刀刃上,是我们的首要工作,而提高同学们的实战能力,是我们系列图书的最终目的。
为了直击命题、突出重点、给同学们节约时间、培养同学们的实战能力,在考题的挑选上,我们通过对统考和自主命题的高校常出现的考题类型和知识点进行深入的总结,抛开在统考或者自主命题的高校的考研真题上极少出现的极难、极易、极偏知识点,精心挑选了和考研难度相近的考题供大家练习。
此外,我们还根据考点的重要程度来完成考点内容分布,在较重要的考点部署较多的内容,在较重要的内容部署较多的命题,在较为不重要的知识点抓住重点布置核心题型。
目的也在于突出考试难度、突出考试重点,方便大家进行实战训练,提高学习效率,让考生在更短的时间内掌握更多的知识点。
3. 解析详细,深入剖析“梦享考研”系列图书一共5本,每一本都很厚,可能会吓怕很多同学。
是不是题目太多了?不是的,其实考题并不多,我们并不提倡题海战术,也不提倡对于同一个知识点反复命题和赘述,我们提倡“少而精”。
针对每一个考点可能出现的命题类型,我们精心挑选了极具代表性的命题供大家实战训练,并对这些习题进行详细、深入的剖析,揭露问题的本质和解题的精髓,有助于大家掌握解题方法和技巧,提高大家的实战能力,在较短的时间掌握更多的知识。
《2016年计算机考研核心考点命题思路解密》系列图书是梦享团队两年的汗水结晶,融入了梦享团队的集体智慧。
另外,真诚感谢我们团队新成员殷巧云、张丽方、胡明明、刘春、白洋等10几位同学提供的建议和帮助!在接下来的更长时间里,梦享团队将用最诚挚的心和最大的努力,写出更优秀、更有助于大家利用更短的时间考得更高分数的考研书。
我们每年都会合理调整这套图书,使得这套图书更加受到大家青睐。
梦享团队会牢牢记住这样一句话——“助你们实现研究生梦想,是我们的梦想!”跟这套图书一样,我们愿伴随着2016年考研的同学一起度过艰辛的追梦季节,伴随着大家一起度过每一个难忘的日日夜夜!也祝福2016年考研的你们,获得圆满的成功!安楠2015年4月于北京目录第一部分数据结构部分第1章算法的时间复杂度和空间复杂度 (8)第2章线性表 (13)2.1 线性表的定义和基本操作 (13)2.2 线性表的实现 (16)第3章栈、队列和数组 (25)3.1 栈和队列的基本概念 (25)3.2 栈和队列的顺序存储结构 (28)3.3 栈和队列的链式存储结构 (32)3.4 栈和队列的应用 (34)3.5 特殊矩阵的压缩存储 (35)第4章树与二叉树 (39)4.1 树的概念 (39)4.2 二叉树 (40)4.3 树、森林 (54)4.4 树的应用 (57)第5章图 (60)5.1 图的概念 (60)5.2 图的存储及基本操作 (62)5.3 图的遍历 (64)5.4 图的基本应用及其复杂度分析 (66)第6章查找 (80)6.1 顺序查找法 (80)6.2 折半查找法 (80)6.3 B-树 (85)6.4 散列(Hash)表及其查找 (92)第7章内部排序 (98)7.1 插入排序 (98)7.2 冒泡排序(bubble sort) (99)7.3 简单选择排序 (101)7.4 希尔排序(shell sort) (102)7.5 快速排序 (104)7.6 堆排序 (106)7.7 归并排序(merge sort) (111)7.8 基数排序 (112)7.9 各种内部排序算法的比较和应用 (114)第一部分数据结构部分温馨提示:《2016年考研核心考点命题思路解密—统考408核心题型》已经于2016年出版,本部分“数据结构”考研资料由梦享团队主编,属于“梦享考研”系列辅导书中的第一部分。
《统考408核心题型》一书包括“数据结构”、“计算机组成原理”、“计算机操作系统”和“计算机网络”四个部分,我们将把这两年多的心血,拿来和各位考生共享。
请同学们将本部分资料与我团队编写《2016年考研核心考点命题思路解密—数据结构》一书区别开来。
《2016年考研核心考点命题思路解密—数据结构》是我团队精编的厚度约300页的数据结构考研辅导书,侧重于每一个考点的命题思路分析。
而本部分资料,侧重于核心题型,只有约120页。
这两份不是同一本书上的内容,本部分内容,也非来源于《2016年考研核心考点命题思路解密—数据结构》,而是单独为每一个考点核心题型编写的资料。
第1章算法的时间复杂度和空间复杂度温馨提示:算法的时间复杂度和空间复杂度几乎在每一年的统考中都会命中一个题,基本的要求是考生能够根据算法来分析时间复杂度。
1.设n 是描述问题规模的非负整数,下面程序片段的时间复杂度是()。
x=2;while(x<n/2)x=2*x;A.O(log2n)B.O(n)C.O(nlog2n)D.O(n2)【2011年统考——第1题】【考查内容】算法的时间复杂度。
【解析】首先,我们要找到程序中执行频率最高的语句,来计算算法的时间复杂度。
显然,语句“x=2*x”的执行频率最高。
假设该语句总共执行了k次,那么第k+1次执行时因为2k+1≥n/2而退出执行。
值得注意的是,在计算算法的时间复杂度时,通常我们都会忽略系数和抓大端。
比如某个算法的执行次数与n的关系为50n2+100n+10000,抓大端时我们只考虑阶最高的项,即50n2,然后再删除系数50,得到算法的时间复杂度为O(n2)。
这里一样的道理,有k+1≈log2(n/2),程序的执行次数k约为log2(n/2)-1,算法的时间复杂度为O(log2n) 。
【参考答案】A2.求整数n(n≥0)阶乘的算法如下,其时间复杂度是()。
int fact(int n){if (n<=1) return 1;return n*fact(n-1);}A.O(log2n)B.O(n)C.O(nlog2n)D.O(n2)【2012年统考——第1题】【考查内容】算法的时间复杂度。
【解析】时间复杂度是由语句频度分析得来. 递归算法中重复执行的语句主要是调用. 所以递归算法的时间复杂度分析主要是分析递归算法中递归函数调用的次数。
对于本题,咱们给出一个递归的图解过程,如图1.1所示。
图1.1从图解可知,该递归过程是线性的。
总共递归执行了n次,时间复杂度为O(n)。
【参考答案】B3.已知两个长度分别为m 和n 的升序链表,若将它们合并为一个长度为m+n 的降序链表,则最坏情况下的时间复杂度是()。
A.O(n)B.O(m×n)C.O(min(m,n))D.O(max(m,n))【2013年统考——第1题】【考查内容】两个升序链表合并成降序链表的时间复杂度。
【解析】我们假设两个升序链表A和B分别如下图所示。
图1.2会出现时间复杂度最大的情况(呵呵…请同学自己想想还有没有其他情况?),即B表全部插入之后,A表剩余的结点采用头插法插入到链表C中。
A表C表B表图1.2要将图1.2的A表和B表合并成C表,显然时间复杂度是O(m+n)。
但是没有这个选项,所以需要咱们再考虑一下哪一个更加接近这个答案。
我们再假设一种极端的情况,那就是我们上图的一个延伸。
假设A表的长度远比B表长(即m远大于n),那么时间复杂度O(m+n)等价于O(m)。
故而,将长度为m和n的升序链表合并成长度为m+n的降序链表,时间复杂度为O(max(m,n))。
实际上,max(m, n)≤m + n ≤2max(m, n),有O(m + n) 等价于O(max(m, n))。