




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构重难点串讲,讲师:翔高教育一级培训师地点:上海,第一章概论,重难点导航,数据的三个层次:数据、数据元素、数据项数据结构的三要素:逻辑结构、物理(存储)结构以及这种逻辑结构上所定义的操作类C语言书写规范时间复杂度、最佳(最坏、平均)时间复杂度、频度、时间复杂度量级空间复杂度两年的统考真题没有直接考察本章的内容,10年统考真题第42题第三问:说明你算法的时间和空间复杂度,3,【例1】算法的时间复杂度与()有关。【武汉理工2007】A问题规模B计算机硬件性能C编译程序质量D程序设计语言解:算法花费的时间与算法中语句的执行次数成正比例,算法中哪个语句执行次多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n),为问题规模。算法的时间复杂度与问题的规模有关,与计算机硬件性能,程序设计语言,编译程序质量无关,4,第二章线性表,5,重难点导航,线性表的操作在顺序和链式两种存储结构上实现的方法以及各自的特点链表是本章学习的重点和难点。要掌握头指针、头结点的作用和区别;并且要学会通过画结点图来完成链表的生成、插入、删除、遍历等操作;能从时间和空间复杂度两方面综合比较线性表在顺序和链式两种存储结构下的特点,6,重难点剖析,线性表的顺序存储结构线性表的顺序存储结构是指用一组连续的存储单元依次存储线性表中的每个数据元素。,其中,L为每个数据元素所占据的存储单元数目。相邻两个数据元素的存储位置计算公式LOC(ai+1)=LOC(ai)+L线性表中任意一个数据元素的存储位置的计算公式为:LOC(ai+1)=LOC(a1)+(i-1)*L,顺序存储结构的特点:(1)利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构(物理结构)一致;2)在访问线性表时,可以利用上述给出的数学公式,快速地计算出任何一个数据元素的存储地址。因此,我们可以粗略地认为,访问每个数据元素所花费的时间相等。这种存取元素的方法被称为随机存取法,使用这种存取方法的存储结构被称为随机存储结构。,在线性表L中第i个数据元素之前插入数据元素eintListInsert(SQ_LIST*L,inti,EntryTypee)if(L-length=LIST_MAX_LENGTH)returnERROR;/检查是否有剩余空间if(iL-length+1)returnERROR;/检查i值是否合理for(j=L-length-1;j=i-1;i+)/将线性表第i个元素之后的所有元素向后移动L.-itemj+1=L-itemj;L-itemi-1=e;/将新元素的内容放入线性表的第i个位置,L-length+;returnOK;,插入算法的分析假设线性表中含有n个数据元素,在进行插入操作时,若假定在n+1个位置上插入元素的可能性均等,则平均移动元素的个数为:,将线性表L中第i个数据元素删除intListDelete(SQ_LIST*L,inti,EntryType*e)if(IsEmpty(L)returnERROR;/检测线性表是否为空if(iL-length)returnERROR;/检查i值是否合理*e=L-itemi-1;/将欲删除的数据元素内容保留在e所指示的存储单元中for(j=i;jlength-1;j+)/将线性表第i+1个元素之后的所有元素向前移动L-itemj-1=L-itemj;L-length-;returnOK;,删除算法的分析在进行删除操作时,若假定删除每个元素的可能性均等,则平均移动元素的个数为:分析结论顺序存储结构表示的线性表,在做插入或删除操作时,平均需要移动大约一半的数据元素。当线性表的数据元素量较大,并且经常要对其做插入或删除操作时,这一点需要值得考虑。,线性表的链式存储结构线性表的链式存储结构是指用一组任意的存储单元(可以连续,也可以不连续)存储线性表中的数据元素。为了反映数据元素之间的逻辑关系,对于每个数据元素不仅要表示它的具体内容,还要附加一个表示它的直接后继元素存储位置的信息。假设有一个线性表(a,b,c,d),可用下图2-2所示的形式存储:,图2-2线性表链式存储结构示意图,链式存储结构的特点(1)线性表中的数据元素在存储单元中的存放顺序与逻辑顺序不一定一致;(2)在对线性表操作时,只能通过头指针进入链表,并通过每个结点的指针域向后扫描其余结点,这样就会造成寻找第一个结点和寻找最后一个结点所花费的时间不等,具有这种特点的存取方式被称为顺序存取方式。,在C语言中,实现线性表的链式存储结构的类型定义typedefstrcutnode/结点类型EntryTypeitem;structnode*next;NODE;typedefstruct/链表类型NODE*head;LINK_LIST;,求链表L的长度intListLength(LINK_LISTL)NODE*p;intlen;for(p=L.head,len=0;p-next=NULL;p=p-next,len+);return(len);,在链表L中第i个数据元素之前插入数据元素eintListInsert(LINK_LIST*L,inti,EntryTypee)NODE*p,*s;intj;if(iListLength(L)+1)returnERROR;s=(NODE*)malloc(sizeof(NODE);if(s=NULL)returnERROR;s-item=e;for(p=L-head,j=0;p,将链表L中第i个数据元素删除,并将其内容保存在e中。intListDelete(LINK_LIST*L,inti,EntryType*e)NODE*p*s;intj;if(iListLength(L)returnERROR;/检查i值的合理性for(p=L-head,j=0;jnext,j+);/寻找第i-1个结点s=p-next;/用s指向将要删除的结点*e=s-item;p-next=s-next;/删除s指针所指向的结点free(s);returnOK;,循环链表将链表中最后一个结点的next域指向头结点,双向循环链表访问后继结点,只需要向后走一步,而访问前驱结点,就需要转一圈。结论:循环链表并不适用于经常访问前驱结点的情况。解决方法:在需要频繁地同时访问前驱和后继结点的时候,使用双向链表。所谓双向链表。双向链表就是每个结点有两个指针域。一个指向后继结点,另一个指向前驱结点。,(a),(b),经典例题分析,【例1】设计一个算法intincrease(LinkList*L),判定带头结点单链表L是否是递减的,若是返回1,否则返回0。【题目分析】要判断单链表是否递减,只要比较相邻的两个元素的值。intincrease(LinkList*L)intmin;记录链表中的最小值LinkList*p,*q;辅助指针p=L-next;if(p)min=p-data;因为链表带头结点q=p-next;while(q!=null),24,if(q-datamin)当前元素的值大于其相邻的前一个元素的值,则不为降序return0;elsemin=q-data;修改最小值q=q-next;指针后移return1;,25,第三章栈、队列和数组,26,重难点导航,栈的定义以及操作栈的顺序存储结构以及链式存储结构,以及在这两种结构下实现栈的基本操作;队列的定义以及操作队列的循环、顺序队列以及链式队列存储结构,以及在这两种结构下实现队列的基本操作栈和队列具体应用的典型问题,27,线性表,栈和队列都是,特殊的,线性表:表中数据元素之间存在着线性关系,特殊性:对表的插入和删除操作受到了限制,栈的顺序表示,a1,a2,a3,a4,Top指在栈顶元素的位置上,空栈:S.Top=-1栈长:S.Top1,二、链栈-不带头结点的单链表,进栈Push:p-next=S;S=p;,出栈Pop:p=S;S=S-next;free(p);判栈空条件:S=NULL;,p,队列,队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。在表中,允许插入的一端称作“队列尾(tail)”允许删除的另一端称作“队列头(front)”。队列又称FIFO(FirstInFirstOut的缩写)表。,队列的存储表示和操作的实现链队列,结构定义typedefSLinkQueuePtr;/链队列的结点结构和单链表相同typedefstructQueuePtrfront;/队列的头指针QueuePtrrear;/队列的尾指针intlength;/队列元素个数Queue;/链队列,循环队列,利用顺序分配存储结构实现队列设立两个指针front和rear分别指示“队头”和“队尾”的位置空队列时,令front=rear=0头指针始终指向队头元素,而尾指针指向队尾元素的下一个位置,循环队列的结构定义,typedefstructElemType*elem;/存储空间基址intrear;/队尾指针intfront;/队头指针intqueuesize;/允许的最大存储空间,以元素为单位Queue;循环队列的初始化需要添加一个最大容量的参数,经典例题分析,【例1】若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是A.d,c,e,b,f,aBc,b,d,a,e,fC.b,c,a,e,f,dDa,f,e,d,c,b【解析】本题考查对堆栈的基本操作。栈的操作必须符合先进后出的原则,又要符合题目要求:不允许连续三次进行退栈操作。所以我们可以快速扫描四个选项,如果发现所给序列中出现长度大于或者等于3的连续逆序子序列,则可排除。选项D中出现fedcb序列,所以正确答案为D。当然也可以依次分析四个选项的进出栈操作序列:A.Push,Push,Push,Push,Pop,Pop,Push,Pop,Pop,Push,Pop,Pop;B.Push,Push,Push,Pop,Pop,Push,Pop,Pop,Push,Pop,Push,Pop;C.Push,Push,Pop,Push,Pop,Pop,Push,Push,Pop,Push,Pop,Pop;D.Push,Pop,Push,Push,Push,Push,Push,Pop,Pop,Pop,Pop,Pop;,36,【例2】某队列允许在其两端进行人队操作,但仅允许在一端进行出队操作。若元素a,b,c,d,e依次入此队列后再进行出队操作,则不可能得到的出队序列是Ab,a,c,d,eBd,b,a,c,eCd,b,c,s,eDe,c,b,a,d【解析】本题考查对队列的操作。出队序列就是在队列中的最终位置。队列的操作必须符合先进先出的原则。题目的队列允许在两端进行入队操作,但允许在一端进行出队操作。所以我们依次分析四个选项的进队操作:Aa入队,b从队头入队,c从队尾入队,d从队尾入队,e从队尾入队Ba入队,b从队头入队,c从队尾入队,d从队头入队
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大楼建筑拆除协议书
- 培训用餐配送协议书
- 夫妻协议离婚协议书
- 汽车电子发智造项目实施方案(范文参考)
- 夫妻关于房子协议书
- 同意小孩改姓协议书
- 学校器官捐赠协议书
- 姐妹合伙卖房协议书
- 山坡临时租地协议书
- 外贸业务合同协议书
- GB/T 8237-2005纤维增强塑料用液体不饱和聚酯树脂
- GB/T 7307-200155°非密封管螺纹
- GB/T 14337-2008化学纤维短纤维拉伸性能试验方法
- 社团课数独入门(课件)
- 全国高中语文优质课一等奖《雷雨》 课件
- L4-《采购与供应策略》-讲义课件
- 软件测试 教学大纲
- 合欢树史铁生课件
- 机房工程系统调试检验批质量验收记录表
- 光伏项目试验报告
- DB37-T 3587-2019养老机构护理型床位认定
评论
0/150
提交评论