数据结构与STL_第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文档。上传文档
查看更多
数据结构与STL_第2章_线性表

《数据结构与STL》 * 申请结点空间 将未分配数组元素链表中的第一个结点分配,同时tail指向数组的下一个未分配元素。 template class T int StaticLinkListT::NewNode()//申请结点空间 { if (-1==tail) throw 空间不足; int pos = tail; //暂放要分配的元素的下标 tail = SArray[tail].next; //tail指向下一个未分配的空间 return pos; } 《数据结构与STL》 * 释放结点 静态链表的结点若不再使用,需要回收到未分配元素构成的空闲链表中。 在具体实现时可直接将其作为表头插入到空闲链表的起始位置。 需要注意的是,如果要释放静态链表的第一个结点,则front需要重新指向下一个元素。 template class T void StaticLinkListT::DeleteNode(int i)//释放结点 { if (i0 || i MAXSIZE-1) throw 释放空间错误; if (front == i) front = SArray[i].next; //如果释放链表的第一个结点,front要后移 SArray[i].next = tail; //要释放的结点插入到未分配元素链表的第一个 tail = i; //tail指向新的第一个未分配元素 } 《数据结构与STL》 * 思考: 能否采用同一个存储空间存储多个静态链表?该如何实现? 《数据结构与STL》 * 第二章 线性表 学习内容: 2.1 线性表的逻辑结构 2.2 线性表的顺序存储结构 2.3 线性表的链式存储结构 2.4 顺序表与链表的比较 2.5 应用举例 2.6 STL中的相关模板类 《数据结构与STL》 * 2.4 顺序表与链表的比较 2.4.1 时间性能比较 顺序表 由数组实现,随机存取结构 对表中任意结点存取操作的时间复杂度为O(1)。 若线性表的主要操作是进行查找,而很少进行插入或删除操作,则采用顺序表比较合适。 链表 在某个位置上进行插入和删除操作,只需要修改指针即可,无须移动大量元素,操作的时间复杂度为O(1)。 若对线性表进行频繁的插入和删除操作时,则采用链表相对合适。若插入和删除主要发生在表头和表尾,则采用循环链表更为方便。 《数据结构与STL》 * 2.4.2 空间性能比较 顺序表:静态分配存储空间,必须提前确定其存储大小。常用于存储规模比较容易确定的线性表。 静态链表:如果同时存在多个结点类型相同的链表,则这些链表可以共享同一静态链表空间。若链表间可以相互调节余缺,则能够减少空间溢出的情况。 动态链表:存储空间动态分配,对于长度变化较大或长度难以估计的线性表,应采用动态链表作为存储结构。 另外,对于链表,除了存储当前结点的数据外,还需要额外的存储空间保存下一个结点的位置,以维护结点间的逻辑关系。 存储密度= 结点中数据域所占的空间 结点结构所占的存储空间 《数据结构与STL》 * 第二章 线性表 学习内容: 2.1 线性表的逻辑结构 2.2 线性表的顺序存储结构 2.3 线性表的链式存储结构 2.4 顺序表与链表的比较 2.5 应用举例 2.6 STL中的相关模板类 -*- 2.5 应用举例 2.5.1置逆算法 以单链表为存储结构,写出就地逆置的算法 a1 a2 an ∧ … first an an-1 a1 ∧ … first -*- a1 a2 an ∧ … first a1 a2 an ∧ … first p p ∧ first a1 a2 an ∧ … 思考步骤1: 摘除头结点 -*- q p ∧ first a1 a2 an ∧ … ∧ first a1 a2 an ∧ … p 思考2:按照头插法的原则建立链表 ∧ p first a1 q a2 an ∧ … a3 -*- 逆置算法 template class Node void reverse(Node *first) { Node *p,*q; p = first-next; //保存原链表的元素 first-next=NULL; //用原链表的头结点建立新的结点 while (p!=NULL) { 1 保存原链表的

文档评论(0)

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

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

1亿VIP精品文档

相关文档