数据结构与算法(C++语言版)课件 第5章 链表与list类.pptx

数据结构与算法(C++语言版)课件 第5章 链表与list类.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第5章链表与list类2025/6/171链表的特点创建链表遍历链表查询与相等添加节点删除节点 更新节点子链表链表的排序合并、倒置和交换链表编写简单的链表

5.1链表的特点2025/6/172链表是由若干个节点组成,这些节点形成的逻辑结构是线性结构,节点的存储结构是链式存储,即节点的物理地址不必是依次相邻的。对于单链表,每个结点含有一个数据,并含有下一个节点的地址。对于双链表,每个节点含有一个数据,并含有上一个节点的地址和下一个结点的地址(C++实现的是双链表)

2025/6/1735.1链表的特点图示意的是有5个节点的双链表(省略了上一个节点的地址箭头示意)。注意,链表的节点序号是从0开始,每个节点的序号等于它前面的节点的个数。链表中的节点的物理地址不必是相邻的,因此,链表的优点是不需要占用一块连续的内存存储空间。

2025/6/1745.1链表的特点?●删除头、尾节点的复杂度O(1)删除前面所示意5个节点的的链表的头节点(大象-节点)后的示意图。

2025/6/1755.1链表的特点?●查询头、尾节点的复杂度O(1)查询狮子和鳄鱼的时间复杂度都是O(1)。

2025/6/1765.1链表的特点?●添加头尾节点的复杂度O(1)要给图5.1所示意的链表的添加新的尾节点(企鹅-节点),根据双链表保存的尾节点的地址,找到尾节点(鳄鱼-节点),将这个尾节点中的下一个节点的引用设置成新添加的节点(企鹅-节点)的地址,将添加的新节点(企鹅-节点)中的上一个节点的地址设置成鳄鱼-节点的地址,将添加的新节点(企鹅-节点)中的下一个节点的地址设置成null,即让新添加的节点成为尾结点。

2025/6/1775.1链表的特点●查询中间节点的时间复杂度O(n)链表的节点的物理地址不是相邻的,节点通过互相保存地址链接在一起。?

2025/6/1785.1链表的特点●删除中间节点的复杂度O(n)链表的节点的物理地址不是相邻的,节点通过互相保存地址链接在一起。?

2025/6/1795.1链表的特点●插入中间节点的复杂度O(n)?插入新节点后,新链表中的节点序号按新的链表长度从0开始排列。

2025/6/17105.1链表的特点●插入中间节点的复杂度O(n)图5.1的链表中插入新的第2个节点(羚羊-节点)

5.2创建链表2025/6/1711std::list是C++标准模板库(StandardTemplateLibrary,STL)中的模板类,用于实现双向链表数据结构(也称链表是STL的容器之一)。它提供了在链表中插入、删除和访问节点的功能。需要注意,当std使用作用域运算符(也称解析运算符))“::”访问list时不要误写为str::List,即不可以将list的首写字母写成大写的L。称std::list类的实例(对象)为链表,其中的节点的逻辑结构是线性结构,节点的存储结构是链式存储。

2025/6/17125.2创建链表ch5_1.cpp使用std::list类创建链表时,必须要指定模板类中的参数类型的具体类型,类型是可以是C++允许的数据类型。1.创建空链表或具有初始节点的链表std::listintlistInt;//空链表std::liststd::stringlistStr;//空链表2.用已有链表创建链表也可以用已有的数据类型相同的链表,例如用listStr链表中的节点创建一个新的链表listNew:std::liststd::stringlistNew(listStr);链表listNew的节点中的数据和listStr的相同。如果链表listNew修改了节点中的数据,不会影响listStr节点中的数据,同样,如果链表listStr修改了节点中的数据,也不会影响listNew节点中的数据。例1创建链表

2025/6/17135.2创建链表?std::list是一个双向链表,它的节点是通过内部类std::list::Node来表示的(用户程序不能直接使用这个内部类)。当链表使用push_back()函数时,链表会自动用Node创建节点、节点包含了存储的数据以及指向前一个节点和后一个节点的指针。

5.3遍历链表2025/6/1714无论何种集合,应当允许用户以某种函数遍历集合中的数据,而不需要知道这些数据在集合中是如何表示及存储的,C++为各种数据结构的集合,比如链表、散列表等不同存储结构的集合都提供了迭代器。链表的存储结构不是顺序结构,因此C++没有为链表提供诸如get(intindex)或at(intindex)等函数来返回当前链表中第index节点中的数据。当用户需要遍历链表中的节点时,应当使用该链表提供的迭代器,而不是让链表本身来遍历其中的节点。

2025/6/17155.3遍历链表1迭代器在

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档