C++ STL_PJ 源码 list 原理解析 (list 必要知识)
了解:C++ list 是属于双向循环链表,就是 “双向链表” 与 “循环链表” 的结合体。所以我们必须对
“双向链表” 与 “循环链表” 了解必要的知识。下篇我们就解析 C++ list容器的奥秘吧!
双向链表
1. 双向链表的结构:
- 表示的链表的 “前驱” (Prev),存储地址
- 表示的链表存储的 “值的部分” (Value)
- 表示的链表的 “后继指针” (Next),存储地址
2. 双向链的实现原理
注意:这个图画的不是很好,等下我会说这个图不好理由!
为了更好理解:我重新设置图
分别有三个链表:x1 , x2 , x3
x1 的地址为 0x61ff18
x2 的地址为 0x61ff19
x3 的地址为 0x61ff20
跟据这个图
我们发现
x1 前驱:前面没有链表了 ,所以 x1 的 “前驱” 为 Null 。
x1 值的部分:存储一个 12 的数字。
x1 后继指针:指向了下一个链表(注意:这个不是指向下一链表的 “前驱”)。
x1 的结构是这样的
x2 结构是这样的
循环链表
1. 循环链表的结构:
- 表示的链表存储的 “值的部分” (Value)
- 表示的链表的 “后继指针” (Next),存储地址
2. 循环链表的实现原理
分别有三个链表:x1 , x2 , x3
x1 的地址为 0x61ff18
x2 的地址为 0x61ff19
x3 的地址为 0x61ff20
我们发现:后继指针 (Next)指向了下个链表地址(注意:不是指向下个链表的 Value ),
当 x3 链表没有下一个指针的时候 ,后继指针 (Next)重新指向了 x1 地址。