数据结构考研复习要点.docx
- 文档编号:29327517
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:13
- 大小:46.82KB
数据结构考研复习要点.docx
《数据结构考研复习要点.docx》由会员分享,可在线阅读,更多相关《数据结构考研复习要点.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构考研复习要点
考研题型包括:
简答题;
方法选择(分析);
构造题;
算法题。
第一章绪论
1.数据结构的基本概念:
数据、数据元素、数据对象、数据结构
2.抽象数据类型:
数据对象、逻辑关系、一组操作。
ADT的特点:
数据抽象、信息隐蔽
3.数据结构三要素:
数据元素间的逻辑关系、物理存储和一组操作。
元素间的逻辑关系:
集合、线性、树、图
元素在计算机内存中的存储结构:
顺序、非顺序
4.算法的定义:
规则的有限集合,为了解决某个特定问题而规定的一系列基本操作。
算法特性:
有限性、确定性、可行性、输入、输出
算法设计目标:
正确性、可读性、鲁棒性、高效率低存储
5.算法性能评价:
时间和空间
算法时间复杂度:
T(n)=O(f(n))。
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。
其中f(n)是问题规模n的某个函数。
求解算法的时间复杂度的具体步骤是:
⑴找出算法中的基本语句;
⑵计算基本语句的执行次数的数量级;
保留基本语句执行次数的函数中的最高次幂,忽略所有低次幂和最高次幂的系数。
⑶用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
O
(1) ) 【例】分析下面各算法的时间复杂度 算法1: intfact(intn) {if(n<=1)return1; returnn*fact(n-1); } 算法2: i=l; while(i { for(j=l;j<=n;j++) x=x+l; i=i*2; } 算法3: for(i=l;i<=n;i++) {j=l; while(j<=i) {x+=l;j++;} } 算法: 4 voidsort(intb[],intn) {inti,j,k; for(i=0;i {k=i; for(j=i+1;j if(b[k]>b[j])k=j; x=b[i];b[i]=b[k];b[k]=x; } } 算法5 voidadd(intn) {inti=0,s=0; while(s {i++; s=s+i; } } 设while循环语句执行次数为T(n),则 算法6 voidhanoi(intn,chara,charb,charc) {if(n==1)printf("move%ddiskfrom%cto%c\n",n,a,c); else {hanoi(n-1,a,c,b); printf("move%ddiskfrom%cto%c\n",n,a,c); hanoi(n-1,b,a,c); } } 算法7: voidPreOrder(BiTreeT) {if(T) {visit(T->daata) PreOrder(T->lchild); PreOrder(T->rchild); } } 算法空间复杂度: 空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。 一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。 【例】分析下面各算法的空间复杂度 voidPreOrder(BiTreeT) {if(T) {visit(T->daata) PreOrder(T->lchild); PreOrder(T->rchild); } } 第二章线性表 一、概念(可能会出的简答题) 1.线性结构特点: 2.线性表定义 3.线性表顺序存储和链式存储各自的优缺点 4.线性表的顺序存储表示与一维数组的关系是什么? 同: 一维数组与顺序表都可按元素下标直接(或随机)存取元素; 异: ●一维数组中各元素间可以有空元素,而顺序表中的元素必须按顺序存放; ●一维数组的基本操作只有按下标存取,而顺序表可以有线性表的所 ●一维数组的大小一经分配便不可变,而顺序表的长度是可变的。 5.线性表的特点是: 除第一个元素外其他每个元素有且只有一个直接前驱,除最后一个元素外其他每个元素都有且只有一个直接后继。 那么,循环链表的每一个结点都有直接后继,双向链表的每一个结点都有直接前驱和直接后继,它们还是线性表吗? 6.在一个单链表L中,P为中间某结点,在P前插入S结点,可否在O (1)时间复杂度内完成。 (可能是分析题) 7.给定一个单链表头指针和指向某结点的指针,如何在时间复杂度O (1)内,删除该结点。 二、算法设计 1.(顺序表)已知长度为n的线性表L采用顺序存储,请写一时间复杂度为O(n),空间复杂度为O (1)的算法,该算法是删除线性表中所有值为item的数据元素。 2.(顺序表)编写算法,其功能是在一个非递减的顺序存储线性表中,删除所有值相等的多余元素。 时间复杂度为O(n),空间复杂度为O (1) 3.(单链表)给定一个字符串,编写统计算法,用链表依次存储字符串中各字符及其出现的次数(不区分字母的大小写)。 4.(单链表)某个带头结点的单链表L,编写算法删除值最小的元素。 5.(单链表)一单链表,以第一个元素为基准,将小于该元素的结点全部放到前面,大于该元素的结点全部放到其后。 6.(单链表和循环链表)已知一个带头结点的单链表List,在不改变链表的前提下,设计一个尽可能有效的算法,查找倒数第k个位置上的结点。 若查找成功,算法输出该结点的值,并返回1;否则返回0。 7.(循环链表)某链表L,可能是单链表,也可能循环链表(为元素的指针域可指向链表中的任意一结点),编写算法判断该链表的类型。 8.(单链表)某一元多项式采用带头结点的单链表存储,编写算法求其导数。 函数声明: voidDerivative(PolyNode*PL),参数为一元多项式的头指针,该多项式按照幂次递增的次序排列,结果仍为PL所指的链表。 9.(单链表和排序)设主串s和子串t分别以单链表存储,t和s中每个字符均用一结点表示(如图)。 实现在链式存储方式下的模式匹配,即求子串t在主串s中第一次出现的位置指针。 data Next 10.(单链表)单链表的就地逆置。 11.(单链表和栈)已知一个循环单链表la,av是可用栈的头指针,请用3个赋值语句,实现释放整个循环单链表功能的操作。 (将单链表中的节点归还到可用栈) 12.从尾到头打印单链表,要求不改变该链表顺序。 (递归或栈) 13.两个有序单链表的合并。 14.给定一个单链表头指针和指向某结点的指针,如何在时间复杂度O (1)内,删除该结点。 15.编写高效算法,找出链表的中间结点。 (两个指针,一个步长为1,一个为2) 17.判断两个链表是否相交;求相交的第一个结点。 (求出两个链表总长度,第一个先走长度差步,然后一起走,碰头的地方就是相交点) 第三章栈和队列 一、概念(可能会出的简答题) 1.栈和队列的异同? 它们分别有什么用途? 2.栈和队列为什么是限定性线性表? 3.递归进层、退层时做哪些事情? 4.递归算法有哪些缺点? 如何消除递归? 二、算法设计 1.链栈的进栈和出栈算法。 2.利用栈的基本操作,实现将一个十进制数n,转换为r(r<=16)进制并输出的算法。 3.设一个栈的输入序列为1,2,…,n,编写算法,判断一个序列p1,p2,…,pn是否是一个合理的输出序列。 4.利用栈的基本操作,将中缀表达式转换为后缀表达式(逆波兰式)。 5.循环队列的进队和出队算法。 区别队空,队满有两个办法: 一是少用一个单元;二是设置标志;三是用一个计数器。 每个办法下如何定义队列结构体、初始化、进队、出队算法都要会写。 6.用带尾指针的循环队列表示队列。 给出此时队列的结构体定义以及队列的初始化、出队和入队操作。 第四章串 一、概念(可能会出的简答题) 1.串为什么也是限定性线性表? 2.什么是串的模式匹配? 3.某串长度为n,该串有多少个子串? 二、算法设计 1.写出顺序串的模式匹配BF算法。 StrIndex(SStrings,intpos,SStringt) 2.写出堆串的串删除操作。 StrDelete(HString*s,intpos,intlen) …… 第五章数组和广义表 一、简答题 1.数组和广义表属于线性表的原因? 2.什么是特殊矩阵? 你了解到的特殊矩阵有哪些? 3.特殊矩阵的压缩原则有哪些? 4.什么是稀疏矩阵? 一般用什么方法压缩稀疏矩阵? 二、分析或计算。 1.一维、二维、三维数组的地址计算。 (多维时,注意按行按列) 【例】设数组a[1..10,5..15]的元素以行为主序存放,每个元素占用4个存储单元,则数组元素a[i,j](1≤i≤10,5≤j≤15)的地址计算公式为()。 A.a-204+2i+jB.a-204+40i+4jC.a-84+i+jD.a-64+44i+4j 2.特殊矩阵被压缩后,给定(i,j),要能算出该元素在一维数组中的存储地址或下标。 (三角矩阵、带状矩阵) 3.掌握三元组表示法表示的稀疏矩阵,如何进行一次定位快速转置。 辅助数组中的值如何计算? 能否用一个辅助数组完成? 4.掌握两种广义表的存储结构。 (会画头尾链、同层结点链结构图) 5.会求广义表的表头和表尾。 第六章树和二叉树 一、简答或分析 1.二叉树有哪些存储结构? 各有什么优缺点。 2.什么是哈夫曼树? 为何哈夫曼编码是最优前缀码? 3.线索化二叉树有何意义? 4.二叉树采用二叉链表存放,要求返回后序(中序)序列中的第一个结点指针,可否不用栈也不用递归完成。 5.一棵完全二叉树第7层有8个叶子结点,该完全二叉树最少有多少结点? 最多有多少结点? 6.一棵完全二叉树一共801个结点,则该完全二叉树共有多少个叶子结点? 多少个度为1的结点? 多少个度为2的结点? 二、构造 1.给定一棵二叉树,给出二叉树的三种遍历序列。 2.给定两种遍历序列(其中一种为中序),画出该二叉树。 3.给定一棵树的先根和后根遍历序列,画出该树。 4.树的三种存储结构。 例如: 已知一棵二叉树的前序遍历结果是ABCEFDGHIJKL,中序遍历结果是BEFCDAHJIGLK,画出该二叉树,并给出其等价的森林中第一棵树的双亲表示结果。 5.给定一棵二叉树,给出其顺序存储结构和扩展先序序列(反之亦然)。 6.线索二叉树。 给定一棵二叉树,能将其线索化(三种)。 7.给定一些权值,可以构造出哈夫曼树,并计算带权路径长度。 (理解带权路径长度的含义) 三、算法设计 1、二叉树的遍历,根据实际问题,选择遍历序列,并确定访问根的操作。 2、二叉树如何线索化。 (中序、先序、后序,也是遍历的应用) 3、在线索二叉树中如何找某结点前驱或后继。 4、树以孩子-兄弟链存储时,如何统计叶子、求高度、按凹入表示打印、按(双亲,孩子)的形式打印、按树的层次输出结点的算法。 5、二叉树的层次遍历。 (判断是否为完全二叉树、输出第K层上的所有结点) 6、最容易和二叉排序树一起考。 既考二叉排序树,又考二叉树遍历。 7、二叉树遍历的非递归算法。 第七章图 一、简答或分析 1.图的遍历中,设置访问标志数组的作用? 如何产生这个作用的? 2.具有n个顶点e条边的无向图,分析其采用邻接矩阵和邻接表存储时的空间复杂度。 3.AOE网和AOV网的区别是什么? 关键路径的定义。 4.求最小生成树有哪些方法? 各自适合什么类型的图。 5.在一图中欲求距离顶点v0的最短路径长度为K的所有顶点,深度优先遍历和广度优先遍历算法哪个算法效率高? 简述原因。 二、构造 1.图的遍历。 给定一个图或图的某种存储结构,能写出图的深度和广度优先遍历,也能画出深度和广度优先生成树。 2.图的应用: 最小生成树、关键路径、最短路径 三、算法 1.要能根据输入,建立一个图。 (无向图、有向图,图的存储结构为邻接矩阵或邻接表) 2.要在能图的邻接矩阵或邻接表存储结构上实现图的深度或广度优先遍历。 3.编写算法,在某图中,判断从vi到vj是否有路径相通。 (两种存储结构上都能完成) 4.图的一些基本操作: 比如插入或删除一个顶点、插入或删除一条弧、统计某顶点的出度或入度等。 5.图的中心顶点。 (总结与提高习题3) 例: 第八章查找 一、简答或分析 1.折半查找的前提条件。 2.分块查找的基本思想。 3.什么是平衡二叉排序树和平衡因子。 4.分析二叉排序树的查找性能。 (最坏性能、最好性能、平均性能以及存储结构的优缺点) 二、构造 1.会画给定元素个数的折半判定树,并分析查找成功和不成功的ASL。 2.给定一个序列,会构造二叉排序树,并分析查找成功和不成功的ASL。 3.根据给定哈希函数和处理冲突的方法,会构建哈希表哈希表,并分析查找成功和不成功的ASL。 例: 设哈希表的长度为8,哈希函数H(k)=kmod7,记录关键字序列为(25,31,8,27,13,66),用线性探测法解决冲突,构造哈希表,并计算等概率情况下,查找成功和失败时的平均查找长度。 三、算法 1、折半查找: 递归和非递归算法。 2、二叉排序树: 按递增顺序输出(中序遍历)、查找某个元素。 3、哈希查找。 哈希表的构建、哈希查找算法、查找成功和不成功的ASL计算。 第九章排序 一、简答或分析 1、冒泡(直接插入、快速排序)在什么情况下排序性能最好,什么时候最差; 2.在10000个元素中,欲找出10个最大的元素,采用哪些排序方法比较好? 原因是什么? 3.什么是排序的稳定性? 举例各至少列举2个稳定和不稳定排序算法。 二、构造 1、给定一个待排序序列,能写出几种常用的排序过程,如直接插入、希尔、冒泡、快速、简单选择、归并排序。 2、给定一个待排序序列,能建立初堆,并完成堆排序。 三、算法 1.一趟快速排序 2.单链表存储结构中的简单选择排序。 以上是仅是对近几年的题目进行分析、总结的结果,并不全面,请务必按考研大纲全面复习。 祝大家好运!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 考研 复习 要点