第二章2线性表链式存储-(精品课件).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 线性表 2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例 2.3 线性表的链式表示和实现 2.3.1 链表的表示 例:请画出26 个英文字母表的链式存储结构。 4)头指针、头结点和首元结点的区别 (3)举例 例1: 例2: sizeof(x)——计算x的长度 malloc(m) —开m字节空间 free(p) ——删除一个变量 附2: 补充结构数据类型的C表示法 2.3.2 链表的实现 (1) 单链表的建立和输出 (2) 单链表的修改 (3) 单链表的插入 (4) 单链表的删除 (1) 单链表的建立和输出 例:用单链表结构来存放26个英文字母组成的线性表(a,b,c,…,z),请写出C语言程序。 (2) 单链表的修改(或读取) 思路:要修改第i个数据元素,必须从头指针起一直找到该结点的指针p,然后才能执行p-data=new_value 。 (3) 单链表的插入 (4) 单链表的删除 2.3.3 链表的运算效率分析 (1) 查找 因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。 2.4 应用举例 链表示意图: 算法设计: 一个带头结点的线性链表类型定义如下: (用类C语言,见P37): 例2:一元多项式的计算 (参见教材P39 – 43) 1. 一元多项式的数学通式? 2. 如何编程实现两个一元多项式相加? 实现思路: 运算效率分析: 算法实现: Void MergeList_L(LinkList La,LinkList Lb,LinkList Lc) { //已知单链线性表La和Lb的元素按值非递减排列。归并为Lc后也按值非递减排列。 free(Lb); //释放Lb的头结点 } //MergeList_L pc-next = pa ? pa: pb ; //插入非空表的剩余段 while(papb) //将pa 、pb结点按大小依次插入Lc中 { if(pa-data=pb-data) {pc-next=pa; pc=pa; pa=pa-next;} else {pc-next=pb; pc=pb; pb=pb-next} } pa=La-next; pb=Lb-next; Lc=pc=La; //有头结点 见P31算法2.12 ?是条件运算符(为真则取第1项,见P10条件赋值) 注:Lc用的是La的头指针 思 考: 1、不用Lc,直接把La表插到Lb表中;或者把Lb表插到La表中,怎么修改? 2、重复的数据元素不需要插入,怎么修改? 讨论: 一元多项式的数学通式? 用抽象数据类型如何描述它的定义? 用C语言如何描述它的定义? 如何编程实现两个一元多项式相加? 但当多项式的次数很高且零系数项很多时,更适于用链表存储。 机内存储方式? 一般用顺序存储—— am-1 am-2 … a2 a1 a0 链式存储 am-1 em-1 am-2 em-2 … a0 e0 ^ 或 0.0 -1 … am-1 em-1 ^ a0 e0 通常设计两个数据域(系数项和指数项)和一个指针域 头结点 只存系数项(但零系数项也不能遗漏) link expon coef P2000(x)= 1+ 3x1000 + 5x2000 3 14 2 8 1 0 a ^ 8 14 -3 10 10 6 b ^ 例: 运算规则:两多项式中指数相同的项对应系数相加,若和不为0,则构成多项式c(=a+b)中的一项;a和b中所有指数不相同的项均应拷贝到c中。 链表a: 链表b: * * 2.3.1 链表的表示 2.3.2 链表的实现 2.3.3 链表的运算效率分析 链式存储结构特点: 其结点在存储器中的位置是随意的,即逻辑上相邻的数据元素在物理上不一定相邻。 如何实现? 通过指针来实现! 让每个存储结点都包含两部分:数据域和指针域 指针 数据 指针 数据 指针 或 样式: 数据域:存储元素数值数据 指针域:存储直接后继或者直接前驱的存储位置 设计思想:牺牲空间效率换取时间效率 该字母表在内存中链式存放的样式举例如下: 解:该字母表的逻辑结构为:( a, b, … ,y, z) 链表存放示意图如下: a1 head a2 /\ an …… 讨论1 :每个存储结点都包含两部分:数据域和

文档评论(0)

夏天 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档