| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> C++征途 --- List链表容器 -> 正文阅读 |
|
|
[数据结构与算法]C++征途 --- List链表容器 |
第一部分 --- 基础概念
? 上面这个模型的是一个单向链表 ? 优点:1.链表增加和删除节点的时候不需要进行vector数组那样的增完后进行后移,也不需要删完后前移,当它增加一个节点的时候,只需要将它插入的位置的上一个节点的指针域中的指针指向增加的节点,然后增加的节点指向该位置的下一个节点 --- 这样就增加完毕了 删除就更简单了,将删除位置的上一个节点的指针指向删除位置的下一个节点就完事了 2.当链表要去遍历遍历每一个节点的时候,由于节点都是分散的,访问节点的时候跳转幅度大,消耗时间长,而数组中的元素都是连续排列的,跳转幅度小,时间短 3.链表中的节点不仅要维护数据域还要维护指针域,所以消耗的空间比只要维护数据域的元素要大
1. 上面的这个模型是一个双向链表:它和单向相比具有的特点就是一个节点的指针域中维护着两个指针,第一个指针是prev指针,这个指针指向相对于它所处的节点的上一个节点 第二个指针是next指针,这个指针指向相对于它所处的节点的下一个节点 对于双向链表的第一个节点而言,它的prev指针为Null 对于双向链表的最后一个节点而言,它的next指针为Null 2.我们的STL库中提供的标准链表是一个双向循环链表,它和双向链表的区别是: 对于双向循环链表的第一个节点而言,它的prev指针指向链表的最后一个节点 对于双向循环链表的最后一个节点而言,它的next指针指针链表的第一个接待你 就这样实现了“循环” 链表的迭代器仅支持前移和后移,不支持跳跃访问,这是由链表的数据结构所决定的: 链表中的一个节点最多只能够访问到它的上一个节点和下一个节点(指针域限制),然后就无法访问其它节点了,所以我们无法实现跳转访问 ?优点:链表是动态存储节点的,是不会出现vector容器那样大容量少于元素的浪费内存空间的现象 这个重要性质是什么意思呢? 1.假设我们让一个迭代器指向节点a,只要节点a不消失,无论链表怎样变动,迭代器指向的内存空间始终不变,我们使用这个迭代器的时候依然能访问到这个节点a --- 迭代器不失效? 2.但是当我们让一个迭代器指向vector容器中的一个元素a时,如果发生了容器扩大容量现象的话,迭代器指向的元素的旧数组就会被销毁(旧数组数据拷贝到新数组中),这就意味着迭代器指向的内存空间被释放,此时迭代器相当于一个野指针,我们无法通过它访问到元素a --- 迭代器失效 第二部分 --- 构造函数
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/23 3:15:23- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |