C++ STL_PJ 源码 list 原理解析

C++ STL_PJ 源码 list 原理解析 (list 必要知识)

了解:C++ list 是属于双向循环链表,就是 “双向链表” 与 “循环链表” 的结合体。所以我们必须对 
“双向链表” 与 “循环链表” 了解必要的知识。下篇我们就解析 C++ list容器的奥秘吧!

双向链表

1. 双向链表的结构:

在这里插入图片描述

  1. 表示的链表的 “前驱” (Prev),存储地址
  2. 表示的链表存储的 “值的部分” (Value)
  3. 表示的链表的 “后继指针” (Next),存储地址
2. 双向链的实现原理

在这里插入图片描述
注意:这个图画的不是很好,等下我会说这个图不好理由!

为了更好理解:我重新设置图C++ STL_PJ 源码 list 原理解析_第1张图片
分别有三个链表:x1 , x2 , x3

x1 的地址为 0x61ff18
x2 的地址为 0x61ff19
x3 的地址为 0x61ff20

跟据这个图
在这里插入图片描述
我们发现
x1 前驱:前面没有链表了 ,所以 x1 的 “前驱” 为 Null 。
x1 值的部分:存储一个 12 的数字。
x1 后继指针:指向了下一个链表(注意:这个不是指向下一链表的 “前驱”)。

x1 的结构是这样的
C++ STL_PJ 源码 list 原理解析_第2张图片
x2 结构是这样的
C++ STL_PJ 源码 list 原理解析_第3张图片

循环链表

在这里插入图片描述

1. 循环链表的结构:
  1. 表示的链表存储的 “值的部分” (Value)
  2. 表示的链表的 “后继指针” (Next),存储地址
2. 循环链表的实现原理

C++ STL_PJ 源码 list 原理解析_第4张图片
分别有三个链表:x1 , x2 , x3

x1 的地址为 0x61ff18
x2 的地址为 0x61ff19
x3 的地址为 0x61ff20

我们发现:后继指针 (Next)指向了下个链表地址(注意:不是指向下个链表的 Value ),
当 x3 链表没有下一个指针的时候 ,后继指针 (Next)重新指向了 x1 地址。

C++ STL_PJ 源码 list 原理解析_第5张图片

你可能感兴趣的:(C++)