- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构链表要点解析
第二章 线性表 (一)讲授内容: 1、线性表的类型定义。 2、线性表的顺序表示和实现。 3、线性表的链式表示和实现。 4、一元多项式的表示及相加。 (二) 教学要求: 1、了解线性表的逻辑结构特性(数据元素之间存在着线性关系),在计算机中表示线性表数据元素关系的两种方法:顺序存储结构和链式存储结构,以及由两种关系表示得到的顺序表、链表。 2、熟练掌握这两种存储结构的描述方法。 3、熟练掌握线性表在顺序存储结构上的各种基本操作:查找、插入和删除的算法。 4、熟练掌握在各种链表结构中实现线性表操作的基本方法,能在实际应用中选用适当的链表结构。了解静态链表的定义及实现方法。 5、能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点、各种操作的算法复杂度分析及其适用场合。 (三)教学重难点: 教学重点: 线性表的基本概念、顺序表的实现及应用;单链表、循环链表以及双向链表的定义、实现及应用。 教学难点: 实现链表删除与插入操作时指针的变化以及特殊情况处理。 学时分配:本章共讲授12学时。 线性结构的特点 在数据元素的非空有限集中 存在唯一的一个被称作“第一个”的数据元素 存在唯一的一个被称作“最后一个”的数据元素 除第一个外,集合中的每个数据元素均只有一个前驱 除最后一个外,集合中的每个数据元素均只有一个后继 2.1 线性表的类型定义 线性表(Linear List) :由n(n≧0)个数据元素组成的有限序列,这里的数据元素只是一个抽象的符号,其具体含义在不同的情况下可以不同:数据元素可以是原子类型,也可以是结构类型。 线性表举例 例 英文字母表(A,B,C,…..Z)是一个线性表 例 计算机拥有量(6,17,28,50,92,188) 复杂线性表中的一个数据元素可由若干数据项组成(结构类型),此时又把数据元素称作记录,把含有大量记录的线性表称作文件。 线性表特征 线性表中的元素具有相同属性,同构 相邻元素之间存在序偶关系,1in时 ai的直接前驱是ai-1,a1无直接前驱 ai的直接后继是ai+1,an无直接后继 非空线性表中每个元素都有一个确定位置 称ai为第i个元素,i为ai的的位序 线性表中数据元素的个数n(n≥0)即是线性表的长度,n=0时称该线性表为空表,n0时通常表示成下列形式: 线性表的ADT 讲解:P19 注意:数据结构的基本运算,不是它的全部运算。每一个基本运算在实现时可根据不同的存储结构派生出一系列相关的运算来。 例:线性表的查找在链式存储结构中还会有按序号查找 例:插入运算,可以是将新元素x插入到适当位置上 建议:掌握了某一数据结构上的基本运算后,其它的运算可以通过基本运算来实现,也可以直接去实现。 线性表的高级操作 合并 分拆 复制 P20 例子2.1 线性表的合并 利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B。 集合的合并运算说明: 1、 LB中与LA中相同的元素不予合并。 2 、不另建新线性表,只需扩大表LA,将LB中需要并入的元素插入到LA中。 3 、LB中需要并入的元素作为LA的尾元素插入。 算法2.1 void union(List La,List Lb) { //将所有在线形表Lb中但不在La中的数据元素插入到La中 La_len=ListLength(La); Lb_len=ListLength(Lb);//求线形表的长度 for(i=1; i =lb_len; i ++) { GetElem(Lb, i ,e);//取Lb中第 i个数据元素赋给e if(!LocateElem(La,e,equal)) ListInsert(La,++La-len,e); // La中不存在和e相同的元素,则插入之 } } 并集运算算法时间复杂度分析 查找一个元素LB(i)是否在表LA中,需要扫描整个表LA,即进行比较的时间为O(ListLenth(LA));每插入一个元素所需时间为常数时间O(1);共调用ListLenth(LB)次元素查找过程,插入元素的个数不会大于LB的长度ListLenth(LB) ,所需查找时间的复杂度为O(ListLenth(LA) * ListLenth(LB))。 例子2.2 线性表的归并 例2-2 巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。 例子2.2 线性表的归并 算法的思想: 从上述问题要求可知,LC中的数据元素或是LA中的数据元素,或是LB中
原创力文档


文档评论(0)