数据结构考点解析课件.ppt
《数据结构考点解析课件.ppt》由会员分享,可在线阅读,更多相关《数据结构考点解析课件.ppt(183页珍藏版)》请在三一办公上搜索。
1、数据结构 考点解析,湖北科技学院计算机学院陈博,数据结构辅导,2,数据结构考点解析,概述第一章知识点第二章知识点第三章知识点第四章知识点第五章知识点第六章知识点,3,考试的要求,考试主要从两个方面进行考查:知识和技能。知识方面从数据结构的结构定义和使用,以及存储表示和操作的实现两个层次,系统地考查:掌握常用的基本数据结构(包括顺序表、链接表、栈与队列、数组、二叉树、堆、树与森林、图、查找结构、索引结构、散列结构)及其不同的实现。,4,2)掌握分析、比较和选择不同数据结构、不同存储结构、不同算法的原则和方法。技能方面系统地掌握基本数据结构的设计方法;掌握选择结构的方法和算法设计的思考方式及技巧;
2、提高分析问题和解决问题的能力。,5,本章“线性表”的知识点有 5 个:线性表的定义和特点:由数据元素组成,惟一直接前驱与后继。线性表的基本操作:查找、定位、遍历、插入、删除。线性表的存储表示:顺序存储、链表存储。循环链表和双向链表:定义和基本运算。线性表的应用:掌握使用线性表基本操作实现应用算法,第一章知识点解析,6,线性表的定义和特点,问题1.如果一个元素集合中每个元素都有1个且仅有1个直接前驱和1个直接后继,它是线性表吗?解析:答案“否”,该元素集合是一个回路(环)。引伸:循环链表是一个“环”,它符合线性表的定义吗?问题的关键是:线性表是逻辑结构,线性表和非线性表是从逻辑上划分的。而循环链
3、表是存储结构,是线性表的一种特殊的表示,是线性链表的一种扩展。它在形态上有线性的特征,在行为上有线性表的循序访问的特点。,7,问题2.如果一个元素集合有一个元素仅有 1 个直接后继而没有直接前驱,另一个元素仅有 1 个直接前驱而没有直接后继,其他每个元素都仅有 1 个直接前驱和 1 个直接后继,但其中各个元素可能数据类型不同,该元素集合是线性表吗?解析:答案“是”,它符合线性表的定义和特性,只要把元素定义为Union类型即可。因为线性表的定义只规定了元素间的关系及每个表元素是原子类型,并未规定每个表元素的类型必须相同。Union是一种等价类型,它允许不同类型数据共享同一存储空间,可保证每个表元
4、素所占空间相同。,8,线性表的基本操作,问题3.我们可以为线性表定义查找、插入、删除等操作吗?它们如何实现?解析:可以为线性表定义这些操作,也可以在程序中直接使用这些操作。但它们的实现与线性表选用何种存储结构有关。在定义了线性表的存储表示之后,必须为相关操作定义它们的实现代码。具体的线性表实例一定与某一存储表示相联系,因此,要使用相应的基于该存储结构实现的操作。,9,线性表的存储表示,问题4.线性表的顺序存储表示是一维数组吗?解析:答案“否”,应是顺序表,其区别在顺序表中元素是相继连续存放的。而一维数组只能有两个操作“按下标存”“按下标取”,它不一定是相继存放,不适宜存储顺序的、连续的序列元素
5、。问题5.想要以O(1)的时间代价存取第 i 个表元素,线性表应采用顺序表还是单链表?解析:“顺序表”,因为单链表只能顺序地逐个访问,顺序表可以直接访问第 i 个元素。,10,问题6.为了统一空链表和非空链表的操作,简化链表的插入删除操作,需要给链表增加点什么?解析:“增加表头结点”。问题7.在何种场合选用顺序表?链表呢?解析:从时间角度来看,需要经常查看不需经常增删的场合使用顺序表,因它可直接存取,但增删要大量移动存储块;反之,选择链表,因它在增删元素时不需移动存储,修改指针即可,但只能顺序访问,存取速度慢。从空间角度来看,顺序表存储密度(有效存储/总存储)高,空间利用率好;链表存储密度较低
6、,空间利用率差一些。,11,循环链表和双向链表,问题8.想要以O(1)的时间代价把两个链表连接起来可采用何种链表结构?解析:“循环链表”,若设两个循环链表头指针为p和q,用r=p-link;p-link=q-link;q-link=r;即可把这两个连接起来。,p,q,12,问题9.想要判断一个带表头结点的循环链表L是否为空,应采用何种语句?解析:“L-link=L”。空表还需保留一个表头结点,它的下一个结点还是它自己。问题10.想要以O(1)的时间代价访问第 i 个表元素的直接前驱和或直接后继,应采用何种链表结构?解析:“双向链表”。只要事先定位于该表结点,通过该结点的前驱指针和后继指针,直接
7、能够找到该元素的直接前驱或直接后继。,13,例1:在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行()As-next=p-next;p-next=s Bq-next=s;s-next=pCp-next=s-next;s-next=p Dp-next=s;s-next=q,14,例2:假设有一个带表头结点的链表,表头指针为head,每个结点含三个域:data,next和prior。其中data为整型数域,next和prior均为指针域。现在所有结点已经由next域连接起来,试编一个算法,利用prior域(此域初值为NULL)把所有结点按照其值从小到大的顺序链接起来
8、。定义类型LinkList如下:typedef struct node int data;struct node*next,*prior;LinkList;,15,例3:设顺序表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。/-线性表的动态分配顺序存储结构-#define maxlen 100/线性表存储空间最大容量typedef structElemType*elem;/存储空间基址 int len;/当前长度SqList;,16,例4:完成以下算法,对单链表实现就地逆置。void LinkList_reverse(Linklist,17,例5:循环链表存储结构示意图如下,请
9、填空:typedef struct LNode/结点类型ElemType data;/数据单元LNode*next;/指针单元*Link,*Position;/定义两个结点指针别名,用于操作函数typedef LNode*LinkList;/简单链表类型,18,循环链表初始化函数InitList的参考代码,一个空的循环链表至少要包含一个头结点。void InitList(LinkList/指针域指向头结点,19,循环链表销毁函数DestroyList的参考代码(循环链表L尾结点的next指针指向L)void DestroyList(LinkList,20,第二章知识点解析,本章“栈、队列与数组
10、”的知识点有 8 个:栈和队列的定义及其特点栈的存储表示及其基本运算的实现队列的存储表示及其基本运算的实现栈的应用队列的应用多维数组特殊矩阵稀疏矩阵,21,栈和队列的定义及其特点,问题1.元素1,2,3,4依次进栈,可能的出栈序列有多少种?队列呢?解析:用catalan函数计算有 8!/4!/4!/5=14种,用队列是1种。因栈有 FILO,队列有 FIFO 特性。问题2.当元素以A,B,C,D,E顺序进栈,D,B,C,E,A 是可能的出栈顺序吗?解析:“否”,因序列的进出栈顺序为 IA IB IC ID OD,当D 出栈后,栈顶为C,不能让B先出来。所以D,B,C,E,A 不是可能的出栈顺序
11、。,22,问题3.可否用两个栈模拟一个队列?反过来呢?解析:“可以”,一个栈把全部数据反过来,另一个栈再把这些数据反过去即可。而队列不能。问题4.栈、队列对线性表加了什么限制?解析:“限制了存取位置”。栈要求只能在表的一端(栈顶)访问、插入和删除,队列要求只能在表的一端(队尾)插入,在另一端(队头)访问和删除,不能在表的中间做上述运算。这决定了在栈和队列上只能顺序访问,不能直接存取,无论采用何种存储表示。这表现了它们优秀的“结构化”特性。,23,栈的存储表示及其基本运算的实现,问题5.当栈空时顺序栈的栈顶指针top=-1,当栈非空时 top 是否指示最后元素加入的位置?解析:“是”,每当新元素
12、进栈时让栈顶指针 top 先加 1,再按 top 指示位置把新元素加入,所以栈非空时栈顶指针总是指示最后加入元素的位置。问题6.顺序栈的进栈、出栈的先决条件是什么?解析:进栈的先决条件是栈未满,栈满再进栈就会产生溢出;出栈的先决条件是栈不空,栈空再退栈可报告操作失败。,24,问题7.当两个栈共享同一个存储空间 Vm 时,可设栈顶指针数组 t2 和栈底指针数组 b2。如果进栈采用两个栈相向前行的方式,则任一栈的栈满条件是什么?解析:“t0+1=t1”。设 0 号栈正向进栈,1 号栈反向进栈,t0 与 t1 碰头即栈满。问题8.链式栈的栈顶指针是指在链头还是链尾?解析:“链头”,链式栈一般采用单链
13、表,栈顶指针即为链头指针。进栈出栈均在链头进行,每次都要修改栈顶指针。链空即栈空,top=NULL。,25,问题9.链式栈只能顺序存取,而顺序栈不但能顺序存取,还能直接存取,这话对吗?解析:“不对”,顺序栈不能直接存取。问题10.理论上链式栈没有栈满问题,但在进栈操作实现时,还要判断一个先决条件,是何条件?解析:每创建新的栈结点时还要判断是否动态分配成功。若不成功则进栈操作失败。StackNode*s=new StackNode;if(s=NULL)cerr“结点存储分配失败!”endl;exit(0);,26,队列的存储表示及其基本运算的实现,问题11.当用牺牲一个单元的方式组织循环队列时,
14、队空和队满的条件是什么?进队、出队的策略是什么?解析:队空条件“Q.front=Q.rear”队满条件“(Q.rear+1)%maxSize=Q.front”进队:Q.rear=(Q.rear+1)%m;Q.elemQ.rear=x;出队:x=Q.elemQ.front;Q.front=(Q.front+1)%m;,27,问题12.当用队头指针 front 和长度 length 组织循环 队列时,队空和队满的条件是什么?进队和出队的策略是什么?(设表长度为m)解析:队空条件“Q.length=0”队满条件“Q.length=maxSize”进队:Q.elem(Q.front+Q.length)
15、%m=x;Q.length+;出队:Q.length-;x=Q.elem(Q.front+Q.length)%m;问题13.链式队列的队头和队尾在链表的什么地方?,28,解析:“链式队列的队头在链头,队尾在链尾”。问题14.链式队列的队空条件是什么?解析:“队空条件Q.front=NULL”,因队头指针为空则说明链表为空。用“Q.front=Q.rear”是不对的。问题15.同时使用多个队列时需采用何种队列结构?如何组织?解析:采用多个链式队列,并设置队头指针数组frn和队尾指针数组ren,分别指示各队列的队头和链尾,其中 n 是队列个数。,29,问题16.链式队列的每个结点是否还可是队列?解
16、析:“可以”,如果每个结点是顺序(循环)队列则是简单的情形;如果每个结点又链接出一个链式队列,则出现“表中套表”,是广义表了。例题17.当一个循环队列已满,如何才能扩充队列长度,使得客户程序能够继续使用这个队列?解析:用指针动态定义存放队列元素的数组,当队列已满时,可创建一个更大的同类型的新数组,把队列元素全部复制到新数组,然后修改队列指针,释放老数组。注意区分 Q.rear Q.front 和Q.front Q.rear 的情形。,30,栈的应用,问题18.在后缀表达式求值过程中用栈存放什么?在中缀表达式求值过程中又用栈存放什么?解析:后缀表达式求值时用栈存放操作数或运算结果,中缀表达式求值
17、时用OPND栈存放操作数或运算结果,用OPTR栈存放操作符。问题19.在递归算法中采用何种结构来存放递归过程每层的局部变量、返回地址和实参副本?解析:“栈”,因递归调用时需为每层分配,在退出时逐层释放,这正是后进先出的机制,可用栈来组织。,31,问题20.为判断表达式中的括号是否配对,可采用何种结构辅助进行判断?解析:“栈”,扫描表达式,每当遇到左括号进栈,遇到右括号再判断栈顶所存括号是否配对,确定是否有错。问题21.在回溯法中采用何种结构来记录回退路径?解析:“栈”,在沿某条路径前进时用栈记下回退路径以便回溯之用,比在路径上各个结点中增加访问标识更方便。例如图的深度优先搜索,采用在每个边结点
18、中增加标志域的非递归算法比用栈的递归算法更复杂。,32,问题22.若进栈序列为1,2,3,4,5,6,出栈序列为2,4,3,6,5,1,问栈容量至少多大?解析:“3”。可实验画图得出。问题23.常用的一种链式栈是基于静态链表的。用一个整数数组 Sn 存放链接指针(游标),设初始时 top=-1,表示栈空,则其进栈、出栈、判栈空等操作如何实现?解析:判栈空:top=-1;设表中第 k 个元素进栈:Sk=top;top=k;设出栈元素是第 k 个元素:k=top;top=Stop;,33,队列的应用,问题24.在逐层处理一个分层结构的数据时,需采用何种辅助结构来组织数据?解析:“队列”,在从队列中
19、退出当前层元素(头)时把相关下层元素进队(尾),在当前层元素处理完后下一层元素已经在队头了。问题25.为实现输入-处理-输出并行操作需建立多个输入缓冲区队列,这些队列是按数组方式组织的还是按链表方式组织的?解析:“按链表方式组织的”,各个队列的增长速度不一,按链表组织可以自由增长。,34,问题26.在操作系统中一种进程调度策略是先来先服务,为此使用了何种辅助结构?解析:“队列”,其特性是先进先出。问题27.在对一个无序单链表进行排序时,可先把链表截出一段段有序的子链表,再对它们做两路归并排序。为此定义队列来辅助排序,此队列的元素的数据类型是什么?解析:“链表结点指针”,存放各有序子链表的头指针
20、。每次从队列中退出两个子链表的头指针,归并后把结果子链表的头指针进队列。如此重复,直到队列中只剩下一个链表指针为止。,35,多维数组,问题28.二维数组可以视为数组元素为一维数组的一维数组,因此二维数组是线性结构吗?解析:“否”,二维数组是一维数组的扩展,每个元素最多有两个直接前驱和两个直接后继,不符合线性表的特性。问题29.二维数组每个元素的存取时间都相同吗?解析:“是”,按照下标确定每个元素存储地址的计算时间都相同,按地址存取任一元素的时间也相同。,36,问题30.数组是逻辑结构还是物理结构?解析:既是逻辑结构也是物理结构。问题31.动态数组用指针来定义。假定数组指针为 a,可否用*a 取
21、出数组元素的值?可否用 a+进到下一数组元素?解析:“可以”,这是C/C+语法文本明确定义的。例如,定义 int a5=1,3,5,7,9;int*data=a;有 int*elem=new int5;while(data!=0)*elem=*data;elem+;data+;for(int k=0;k n;k+)cout elemk;,37,问题32.链表也是动态结构。假定链表指针为*a,可否用*a 取出链表结点的值?可否用 a+进到下一链表结点?解析:“不可以”,因为 a 所指结点有两个域,*a 不能取出结点内的数据,只能用 a-data 取出结点数据。同样不能用 a+进到下一结点,因为
22、a+是进到物理上的下一个结点,而链表中逻辑上的下一个不见得是物理上的下一个,所以要进到逻辑上的下一个,只能用a=a-link。,38,特殊矩阵,问题33.如果用下三角压缩存储对称矩阵,B0存放A00,如何存取Aij?解析:当 ij 时,Aij在B中的位置是i*(i+1)/2+j。当 ij 时,Aij在B中不存在。问题34.两个对称矩阵相加,结果矩阵还对称吗?两个对称矩阵相乘,结果矩阵还对称吗?解析:两个对称矩阵相加的结果矩阵是对称矩阵。相乘的结果矩阵一般不对称,除非二个对称矩阵是相同的。,39,问题35.两个三对角矩阵相加,结果矩阵还是三对角矩阵吗?相乘的情况又如何?解析:相加的结果矩阵还是三
23、对角矩阵。相乘的结果矩阵一般不是。,40,稀疏矩阵,问题36.三对角矩阵是否稀疏矩阵?解析:“否”,三对角矩阵也有大量零元素,但其分布有规律,不符合稀疏矩阵定义。问题37.两个稀疏矩阵相加,结果矩阵还是稀疏矩阵吗?两个稀疏矩阵相乘,结果矩阵又如何?解析:相加的结果矩阵不一定是稀疏矩阵,相乘的结果矩阵肯定不是稀疏矩阵。问题38.用三元组表存储稀疏矩阵的非零元素,是否失去了直接存取的特性?如何改进?,41,解析:是,原稀疏矩阵的元素可通过行列下标直接存取,而三元组表只能顺序存取。改进的方法是采用带行指针的二元组表,可以直接找到某行,且消除了三元组表中冗余的行号。在二元组表内搜索某列元素还需顺序查找
24、,但个数少得多。,42,设有一个栈,元素的进栈次序为A,B,C,D,E,下列是不可能的出栈序列_。AA,B,C,D,E BB,C,D,E,ACE,A,B,C,D DE,D,C,B,A,43,设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是。A.1 B.2 C.3 D.4,44,稀疏矩阵一般的压缩存储方法有两种,即()。A.二维数组和三维数组 B.三元组和散列C.三元组和十字链表 D.散列和十字链表,45,一个稀疏矩阵如下图所示,则对应的三元组线性表为_。,46,由两个
25、栈共享一个向量空间的好处是:()A减少存取时间,降低下溢发生的机率 B节省存储空间,降低上溢发生的机率 C减少存取时间,降低上溢发生的机率 D节省存储空间,降低下溢发生的机率,47,第三章知识点解析,本章“树与二叉树”的知识点有 10 个:树与二叉树的定义和性质二叉树的存储结构二叉树的遍历线索二叉树树与森林二叉树的应用(二叉排序树、平衡二叉树、并查集、Huffman树、堆),48,树与二叉树的定义和性质,问题1.二叉树是树吗?解析:“否”,树的定义是从图来的,要求结点至少有1个,二叉树则可以是空树;另外二叉树必为有序树,树可有序,也可无序。问题2.树的叶结点无子女,是否可称它无子树?解析:“是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 考点 解析 课件
链接地址:https://www.31ppt.com/p-3644424.html