《第二章线性表陈海涛》-课件.ppt

  1. 1、本文档共128页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.1.1 线性表的定义: 一个线性表是n≥0个同类型的数据元素a1,a2,…,an组成的有限序列。记为( a1,a2,…, ai-1,ai,ai+1,…,an) 。 其中: n称为线性表的长度。 n=0称为空表,表示无数据元素。 n0时,则除a1和an外,有且仅有一个直接前趋和一个直接后继数据元素,ai(1≤i≤n)为线性表的第i个数据元素(i称为线性表的位序),它在数据元素ai-1之后,在ai+1之前。a1为线性表的第一个数据元素,而an是线性表的最后一个数据元素。 一个线性表可以用一个标识符来命名,如用L命名上面的线性表,则: L=( a1,a2,…, ai-1,ai,ai+1,…,an) 线性表中的元素在位置上是有序的,即第i个元素ai处在第i-1个元素ai-1的后面和第i+1个元素ai+1的前面,这种位置上的有序性就是一种线性关系,所以线性表是一个线性结构,用二元组表示为: 线性表 L=(D,R) D={ a1 |1≤i≤n, n≥1, ai属ElemType类型} R= { ai-1,ai | ai-1,ai ∈D, i=2,…,n} 当一个线性表的元素(从小到大或从大到小)有序排列时,称为有序线性表,简称为有序表 矩阵也是一个线性表,但它是一个比较复杂的线性表。在矩阵中,我们可以把每行看成是一个数据元素,也可以把每列看成是一个数据元素,而其中的每一个数据元素又是一个线性表。 例2-4 一个一维数组M,下标的范围是0到9,每个数组元素用相邻的5个字节存储。存储器按字节编址,设存储数组元素M[0]的第一个字节的地址是98,则M[3]的第一个字节的地址是 2.5 顺序表和单链表的比较 存储分配方式比较 顺序表采用顺序存储结构,即用一段地址连续的存储单元依次存储线性表的数据元素,数据元素之间的逻辑关系通过存储位置来实现。 单链表采用链接存储结构,即用一组任意的存储单元存放线性表的元素。用指针来反映数据元素之间的逻辑关系。 时间性能比较 时间性能是指实现基于某种存储结构的基本操作(即算法)的时间复杂度。 按位查找: 顺序表的时间为O(1),是随机存取; 单链表的时间为O(n),是顺序存取。 插入和删除: 顺序表需移动表长一半的元素,时间为O(n); 单链表不需要移动元素,在给出某个合适位置的指针后,插入和删除操作所需的时间仅为O(1)。 空间性能比较 空间性能是指某种存储结构所占用的存储空间的大小。 定义结点的存储密度: 空间性能比较 结点的存储密度: 顺序表中每个结点的存储密度为1(只存储数据元素),没有浪费空间; 单链表的每个结点的存储密度1(包括数据域和指针域),有指针的结构性开销。 整体结构: 顺序表需要预分配存储空间,如果预分配得过大,造成浪费,若估计得过小,又将发生上溢; 单链表不需要预分配空间,只要有内存空间可以分配,单链表中的元素个数就没有限制。 顺序表和单链表的选择 ⑴若线性表需频繁查找却很少进行插入和删除操作,或其操作和元素在表中的位置密切相关时,宜采用顺序表作为存储结构;若线性表需频繁插入和删除时,则宜采用单链表做存储结构。 ⑵当线性表中元素个数变化较大或者未知时,最好使用单链表实现;而如果用户事先知道线性表的大致长度,使用顺序表的空间效率会更高。 总之,线性表的顺序实现和链表实现各有其优缺点,不能笼统地说哪种实现更好,只能根据实际问题的具体需要,并对各方面的优缺点加以综合平衡,才能最终选定比较适宜的实现方法。 本章小结 习 题 二 讨论: 我们在双向链表中进行删除操作时,还需注意下面两种情况: 1)当删除不带头结点的链表的第一个结点时,应将链表开始结点的指针指向链表的第二个结点,同时将链表的第二个结点的prior置为NULL。 2)当删除链表的最后一个结点时,只需将链表的最后一个结点的上一个结点的next置为NULL即可。 循环链表是将最后一个结点的指针域的指针又指链表的表头结点,这样从表中任一结点出发都可找到表中其他的结点。和单链表的差别仅在于判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。在循环链表中,除了头指针head外,有时还加了一个尾指针rear,尾指针rear指向最后一结点,从最后一个结点的指针又可立即找到链表的第一个结点。在实际应用中,使用尾指针代替头指针来进行某些操作,往往更简单。 2. 循环链表

您可能关注的文档

文档评论(0)

沙卡娜 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档