数据结构基础复习.ppt
《数据结构基础复习.ppt》由会员分享,可在线阅读,更多相关《数据结构基础复习.ppt(115页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构数据结构考研辅导考研辅导 基础复习基础复习浙江大学计算机学院浙江大学计算机学院内容提纲内容提纲考研概述考研概述1基础内容复习基础内容复习2线性表、堆栈、队列、数组线性表、堆栈、队列、数组A树与图树与图B查找与排序查找与排序C考研概述考研概述v考察目标考察目标理解数据结构的基本概念:掌握数据结构理解数据结构的基本概念:掌握数据结构的逻辑结构、存储结构及其差异,以及各的逻辑结构、存储结构及其差异,以及各种基本操作的实现。种基本操作的实现。在掌握基本的数据处理原理和方法的基础在掌握基本的数据处理原理和方法的基础上,能够对算法进行设计与分析。上,能够对算法进行设计与分析。能够选择合适的数据结构
2、和方法进行问题能够选择合适的数据结构和方法进行问题求解。求解。考研概述考研概述v考试形式考试形式整卷满分为整卷满分为150分,考试时间为分,考试时间为180分钟分钟数据结构占数据结构占45分,估计用时分,估计用时4550分钟分钟单选题:单选题:40题题 2分分/题,估计占题,估计占10题题20分左分左右,建议用时不超过右,建议用时不超过2分钟分钟/题题综合题:综合题:70分,估计占分,估计占2题共题共2025分,建分,建议用时不超过议用时不超过10分钟分钟/题题考研概述考研概述v复习计划复习计划基础理论复习基础理论复习例题详解例题详解题目范围:真题题目范围:真题1套套+模拟题模拟题9套套+补充
3、题补充题模拟题第模拟题第10套将用于最后一天模拟考试套将用于最后一天模拟考试基础内容复习基础内容复习数据结构(数据结构(C语言版)语言版),严蔚敏、吴伟民,清华大学出版社,严蔚敏、吴伟民,清华大学出版社v线性表、堆栈、队列、数组线性表、堆栈、队列、数组v树与图树与图v查找与排序查找与排序6线性表、堆栈、队列、数组线性表、堆栈、队列、数组v 线性表线性表定义:定义:n个数据元素的有限序列个数据元素的有限序列基本操作:随机访问、插入、删除、前驱、后基本操作:随机访问、插入、删除、前驱、后继、倒序等继、倒序等实现方式:实现方式:顺序存储:数组顺序存储:数组aiai+1Loc(ai)Loc(ai+1)
4、=Loc(ai)+llLoc(ai)=Loc(a1)+?(i-1)*lv线性表线性表实现方式:实现方式:顺序存储:数组顺序存储:数组线性表、堆栈、队列、数组线性表、堆栈、队列、数组 是一种随机存取的存储结构,方便随机存是一种随机存取的存储结构,方便随机存取第取第i个数据元素个数据元素 插入、删除复杂度为插入、删除复杂度为O(n),需要移动大量,需要移动大量元素元素v自测题自测题在在n个结点的顺序表中,算法的时间复杂度是个结点的顺序表中,算法的时间复杂度是O(1)的操作是:的操作是:A.访问第访问第i个结点个结点(1in)和求第和求第i个结点的直接前驱个结点的直接前驱(2in)B.在第在第i个结
5、点后插入一个新结点(个结点后插入一个新结点(1in)C.删除第删除第i个结点(个结点(1in)D.将将n个结点从小到大排序个结点从小到大排序线性表、堆栈、队列、数组线性表、堆栈、队列、数组线性表、堆栈、队列、数组线性表、堆栈、队列、数组v线性表线性表实现方式:实现方式:链式存储:链表链式存储:链表 线性链表线性链表存储地存储地址址数据域数据域指针域指针域1LiNULL7Qian1313Sun119Zhao7头指针头指针H=19HZhaoQianSunLi 若若 p-data=ai 则则 p-next-data=ai+1typedef struct LNode ElemType data;str
6、uct LNode *next;LNode,*LinkList;有时附加有时附加头结点头结点v自测题自测题线线性性表表若若采采用用链链式式存存储储结结构构时时,要要求求内内存存中中可可用用存储单元的地址存储单元的地址:A.必须是连续的必须是连续的B.部分地址必须是连续的部分地址必须是连续的C.一定是不连续的一定是不连续的D.连续或不连续都可以连续或不连续都可以线性表、堆栈、队列、数组线性表、堆栈、队列、数组线性表、堆栈、队列、数组线性表、堆栈、队列、数组v线性表线性表实现方式:实现方式:链式存储:链表链式存储:链表 线性链表线性链表 插入、删除复杂度为插入、删除复杂度为O(1),仅需修改指针,
7、仅需修改指针而而不不需要移动元素需要移动元素 是一种是一种非非随机存取的存储结构,随机存取的存储结构,不不方便随方便随机存取第机存取第i个数据元素个数据元素*静态链表静态链表(p.31-35)v自测题自测题下面的叙述不正确的是(下面的叙述不正确的是()A.线性表在链式存储时,查找第线性表在链式存储时,查找第i个元素的时间个元素的时间同同i的值成正比的值成正比B.线性表在链式存储时,查找第线性表在链式存储时,查找第i个元素的时间个元素的时间同同i的值无关的值无关C.线性表在顺序存储时,查找第线性表在顺序存储时,查找第i个元素的时间个元素的时间同同i 的值成正比的值成正比D.线性表在顺序存储时,查
8、找第线性表在顺序存储时,查找第i个元素的时间个元素的时间同同i的值无关的值无关线性表、堆栈、队列、数组线性表、堆栈、队列、数组v自测题自测题在一个单链表中,若在一个单链表中,若p所指的结点不是最后结点,所指的结点不是最后结点,在在p之后插入之后插入s所指结点,则执行:所指结点,则执行:A.s-next=p;p-next=s;B.s-next=p-next;p-next=s;C.s-next=p-next;p=s;D.p-next=s;s-next=p;线性表、堆栈、队列、数组线性表、堆栈、队列、数组psv自测题自测题在单链表中,指针在单链表中,指针p指向元素为指向元素为x的结点,实现的结点,实
9、现“删除删除x的后继的后继”的语句是:的语句是:A.p=p-next;B.p-next=p-next-next;C.p-next=p;D.p=p-next-next;线性表、堆栈、队列、数组线性表、堆栈、队列、数组xp线性表、堆栈、队列、数组线性表、堆栈、队列、数组v线性表线性表实现方式:实现方式:链式存储:链表链式存储:链表 循环链表循环链表 双向链表双向链表HHHH有时设有时设尾指尾指针针可简化某可简化某些操作,如些操作,如两表合并。两表合并。v自测题自测题设一个链表最常用的操作是在末尾插入结点和删设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用除尾结点,则选用()最节省时间。最
10、节省时间。A.单链表单链表 B.单循环链表单循环链表 C.带尾指针的单循环链表带尾指针的单循环链表 D.带头结点的双循环链表带头结点的双循环链表线性表、堆栈、队列、数组线性表、堆栈、队列、数组v自测题自测题将线性表将线性表La和和Lb头尾连接,要求时间复杂度为头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结,且占用辅助空间尽量小。应该使用哪种结构?构?A.单链表单链表 B.单循环链表单循环链表 C.带尾指针的单循环链表带尾指针的单循环链表 D.带头结点的双循环链表带头结点的双循环链表线性表、堆栈、队列、数组线性表、堆栈、队列、数组tmp=La-next;La-next=
11、Lb-next;Lb-next=tmp;LaLb线性表、堆栈、队列、数组线性表、堆栈、队列、数组v线性表线性表练习练习1:分别实现数组、单链表、循环链表、双向链分别实现数组、单链表、循环链表、双向链表的插入和删除操作。表的插入和删除操作。练习练习2:实现单链表的原地逆转。实现单链表的原地逆转。练习练习3:分别用一元多项式的两种表示实现多项式加分别用一元多项式的两种表示实现多项式加法。法。32-51-2 3000 -1103200P19v自测题自测题给定给定2个带有表头结点的单链表的头指针个带有表头结点的单链表的头指针L1和和L2,结点结构为结点结构为 。假设这。假设这2个链表的结点个链表的结点
12、已经按已经按Data域递增有序,请设计算法把它们合并成域递增有序,请设计算法把它们合并成一个按一个按Data域递增有序的链表。注意:算法不能使域递增有序的链表。注意:算法不能使用额外的结点空间。用额外的结点空间。线性表、堆栈、队列、数组线性表、堆栈、队列、数组DataNext 算法思路为顺序比较算法思路为顺序比较L1和和L2当前所指的两结点的当前所指的两结点的Data域,将小的那个结点从原链表摘除,贴到合并链表域,将小的那个结点从原链表摘除,贴到合并链表的尾部。如此进行到至少其中一个链表为空。若此时另的尾部。如此进行到至少其中一个链表为空。若此时另一个链表不为空,则将另一个链表整个贴到合并链表
13、的一个链表不为空,则将另一个链表整个贴到合并链表的尾部。注意原始尾部。注意原始2个链表有个链表有2个头结点,合并后只保留一个头结点,合并后只保留一个,需要释放另一个的空间。个,需要释放另一个的空间。List MergeSortedLists(List L1,List L2)List L=L1;List Tail=L2;L1=L1-Next;L2=L2-Next;free(Tail);Tail=L;/释放第二个链表的表头,并将新链表的表尾指针释放第二个链表的表头,并将新链表的表尾指针Tail初始化初始化while(L1&L2)if(L1-Data L2-Data)Tail-Next=L2;L2=
14、L2-Next;/第二个链表的第一结点值小,将其插入新链表尾第二个链表的第一结点值小,将其插入新链表尾 else Tail-Next=L1;L1=L1-Next;/第一个链表的第一结点值小,将其插入新链表尾第一个链表的第一结点值小,将其插入新链表尾 Tail=Tail-Next;if(L1)Tail-Next=L1;/将剩余的第一个链表接到新链表表尾将剩余的第一个链表接到新链表表尾else if(L2)Tail-Next=L2;/将剩余的第二个链表接到新链表表尾将剩余的第二个链表接到新链表表尾return L;v自测题自测题给定给定2个带有表头结点的单链表的头指针个带有表头结点的单链表的头指针
15、L1和和L2,结点结构为结点结构为 。假设这。假设这2个链表的结点个链表的结点已经按已经按Data域递增有序,请设计算法把它们合并成域递增有序,请设计算法把它们合并成一个按一个按Data域域递减递减有序的链表。注意:算法不能使有序的链表。注意:算法不能使用额外的结点空间。用额外的结点空间。线性表、堆栈、队列、数组线性表、堆栈、队列、数组DataNext 解题的基本思路不变,只要将原来的表尾插入改为表解题的基本思路不变,只要将原来的表尾插入改为表头插入即可。当然,当其中一个链表为空而另一个链表头插入即可。当然,当其中一个链表为空而另一个链表不为空时,不能直接将剩余链表贴到表尾,而必须将剩不为空时
16、,不能直接将剩余链表贴到表尾,而必须将剩余结点一个一个插入表头。余结点一个一个插入表头。v自测题自测题若若L1和和L2是有序是有序数组数组,其结点已经按,其结点已经按Data域递增域递增有序,请设计算法把它们合并成一个按有序,请设计算法把它们合并成一个按Data域递增域递增有序的数组。注意:要求将有序的数组。注意:要求将L2并入并入L1,并且要求移,并且要求移动元素的次数尽可能少。动元素的次数尽可能少。线性表、堆栈、队列、数组线性表、堆栈、队列、数组 必须事先算好合并后必须事先算好合并后L1的长度,然后从的长度,然后从L1的最终尾的最终尾部向前插入元素。插入过程与前面算法类似,但是是部向前插入
17、元素。插入过程与前面算法类似,但是是从从尾部开始尾部开始比较比较L1和和L2相应元素大小,将较大的元素先插相应元素大小,将较大的元素先插入到后面的位置。入到后面的位置。void MergeSortedArrays(ElementType L1,int N1,ElementType L2,int N2)int p1,p2,cur;p1=N1-1;/p1指向指向L1当前处理的元素位置当前处理的元素位置p2=N2-1;/p2指向指向L2当前处理的元素位置当前处理的元素位置cur=N1+N2-1;/cur指向下一个要插入的元素在指向下一个要插入的元素在L1中的最终位置中的最终位置while(p1=0)
18、&(p2=0)if(L1p1 L2p2)L1cur=L1p1;p1-;else L1cur=L2p2;p2-;cur-;while(p2=0)/将将p2的剩余元素插入到的剩余元素插入到L1中中L1p2=L2p2;p2-;v堆栈堆栈概念:后进先出,限定仅在表尾进行插入删除概念:后进先出,限定仅在表尾进行插入删除的线性表。的线性表。表示与实现:表示与实现:顺序栈:数组,顺序栈:数组,top+,top-链栈:链表,链栈:链表,top即为头指针即为头指针应用:括号匹配检验、表达式求值、应用:括号匹配检验、表达式求值、n阶阶Hanoi塔问题(典型递归)、迷宫问题塔问题(典型递归)、迷宫问题线性表、堆栈、
19、队列、数组线性表、堆栈、队列、数组v自测题自测题判定一个栈判定一个栈ST(最多元素为最多元素为m0)为空的条件是:为空的条件是:A.ST-top!=0B.ST-top=0C.ST-top!=m0D.ST-top=m0线性表、堆栈、队列、数组线性表、堆栈、队列、数组v自测题自测题有六个元素以有六个元素以6,5,4,3,2,1 的顺序进栈,的顺序进栈,问下列哪一个不是合法的出栈序列?问下列哪一个不是合法的出栈序列?A.5 4 3 6 1 2 B.4 5 3 1 2 6 C.3 4 6 5 2 1 D.2 3 4 1 5 6线性表、堆栈、队列、数组线性表、堆栈、队列、数组v自测题自测题若一个栈的输入
20、序列为若一个栈的输入序列为1,2,3,n,输出,输出序列的第一个元素是序列的第一个元素是i,则第,则第j个输出元素是:个输出元素是:A.i j 1 B.i j C.j i 1 D.不确定的不确定的线性表、堆栈、队列、数组线性表、堆栈、队列、数组v队列队列概念:先进先出,限定仅在队尾进行插入、仅概念:先进先出,限定仅在队尾进行插入、仅在队头进行删除的线性表。在队头进行删除的线性表。表示与实现:表示与实现:顺序队列:循环数组,顺序队列:循环数组,(rear+1)%N,(front+1)%N链栈:链表,链栈:链表,front为头指针,为头指针,rear为尾指针为尾指针应用:离散事件模拟应用:离散事件
21、模拟线性表、堆栈、队列、数组线性表、堆栈、队列、数组v自测题自测题循环队列用数组循环队列用数组A0,N1存放其元素值,已知存放其元素值,已知其头尾指针分别是其头尾指针分别是front和和rear,则当前队列中的,则当前队列中的元素个数是:元素个数是:A.(rear-front+N)%NB.rear-front+1C.rear-front-1D.rear-front线性表、堆栈、队列、数组线性表、堆栈、队列、数组01.N-1frontrearv自测题自测题栈和队列的共同特点是:栈和队列的共同特点是:A.都是先进后出都是先进后出 B.都是先进先出都是先进先出 C.只允许在同一端点处插入和删除只允许
22、在同一端点处插入和删除 D.没有共同点没有共同点 线性表、堆栈、队列、数组线性表、堆栈、队列、数组v数组数组 特殊矩阵的压缩存储特殊矩阵的压缩存储对称矩阵:对称矩阵:线性表、堆栈、队列、数组线性表、堆栈、队列、数组an,1a11a21a22a31an,nSAk0123*上(下)三角矩阵同理存储,或许多存储一个常数(若另一上(下)三角矩阵同理存储,或许多存储一个常数(若另一半矩阵元素是非零常数)。半矩阵元素是非零常数)。线性表、堆栈、队列、数组线性表、堆栈、队列、数组v数组数组 特殊矩阵的压缩存储特殊矩阵的压缩存储m对角矩阵:对角矩阵:或者或者 稀疏矩阵:稀疏矩阵:nrow=3,ncol=5,n
23、total=6(1,3,4),(2,1,7),(2,3,1),(2,5,-3),(3,2,-2),(3,5,5),线性表、堆栈、队列、数组线性表、堆栈、队列、数组v数组数组 特殊矩阵的压缩存储特殊矩阵的压缩存储稀疏矩阵:稀疏矩阵:三元组顺序表:以行序为主序,顺序排列为三元三元组顺序表:以行序为主序,顺序排列为三元组的组的1维数组,并存行数、列数、非维数组,并存行数、列数、非0元个数。元个数。typedef struct inti,j;ElemTypev;Triple;typedef union Triple dataMAXSIZE+1;intnrow,ncol,ntotal;Sparse_Ma
24、trix;ijv13421723125-3553-223线性表、堆栈、队列、数组线性表、堆栈、队列、数组v数组数组 特殊矩阵的压缩存储特殊矩阵的压缩存储稀疏矩阵:稀疏矩阵:三元组顺序表:三元组顺序表:快速转置快速转置ijv12723-2314321535-325ijv13421723125-3553-223对每列扫描整个数组:对每列扫描整个数组:O(ncol ntotal)如何一步到位,放入正确位置?如何一步到位,放入正确位置?numcol 第col列中非0元个数;cpotcol 第col列中第1个非0元在转置矩阵中的位置;cpot1=1;cpotcol=cpotcol-1+numcol-1;
25、1 2 3 4 5col1 1 2 0 2num1 2 3 5 5cpot42O(ncol+ntotal)线性表、堆栈、队列、数组线性表、堆栈、队列、数组v数组数组 特殊矩阵的压缩存储特殊矩阵的压缩存储稀疏矩阵:稀疏矩阵:行逻辑链接的顺序表:行逻辑链接的顺序表:矩阵相乘矩阵相乘typedef struct Triple dataMAXSIZE+1;intrposMAXRC+1;intnrow,ncol,ntotal;Sparse_Matrix;各行第1个非0元在数组中的位置设设 M=A B,则有,则有关键:关键:对每个对每个A.datap,找所有,找所有B.dataq,满足,满足(A.data
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 基础 复习
限制150内