1. 什麼是雙向迴圈列表?
雙向鍊錶是對與 「迴圈鍊錶」 與 「雙向鍊錶」 的結合
注意:如果對 「迴圈鍊錶」 與 「雙向鍊錶」 不太熟識去看之前的文章! 這裡對鍊錶不做過多解析!
2. 鍊錶的架構!
prev 前驅
value 值
next 後繼指標
3. 直接上**!
這裡不會對 「萃取」 進行分析,所以我把 「萃取」 去掉。
本章節對原始碼進行部分閹割,來是原始碼更加容讀.
之後的章節在全部補充
(3 - 1) 預設鍊錶(不做任何操作)
// list.cpp
#include #include "list.h"
int main()
// list.h
#ifndef _lish_h
#define _lish_h
#include "malloc.h"
template // 定義模板
class list
struct _node;
public:
list():_head(_buynode()),_size(0){} // 預設實現 _head 鍊錶
protected:
_nodeptr _buynode()
private:
_nodeptr _head; // 雙向迴圈鍊錶的頭
_size_type _size; // 所儲存的鍊錶的個數
};#endif
這樣的無資料的鍊錶完成,雙向迴圈鍊錶預設生成 「頭」 的鍊錶。
——————————————————————————————————————————
(3 - 2) 預設鍊錶(實現 push_back 操作)
這裡我對鍊錶進行精簡,閹割很多東西。(上面看懂才看下面的)
// list.h
#ifndef _lish_h
#define _lish_h
template class list;
public:
list():_head(_buynode()),_size(0){} // 預設實現 _head 鍊錶
public:
void push_back(_ty &val)
protected:
_nodeptr _buynode()
private:
_nodeptr _head;
_size_type _size;
};#endif
// list.cpp
#include #include "list.h"
using namespace std;
int main();
listmylist;
for(int i = 0; i < 5; ++i)
}
鍊錶結構的圖,裡面需要自己體會!
C STL PJ 原始碼 list 原理解析
了解 c list 是屬於雙向迴圈鍊錶,就是 雙向鍊錶 與 迴圈鍊錶 的結合體。所以我們必須對 雙向鍊錶 與 迴圈鍊錶 了解必要的知識。下篇我們就解析 c list容器的奧秘吧!雙向鍊錶 1.雙向鍊錶的結構 表示的鍊錶的 前驅 prev 儲存位址 表示的鍊錶儲存的 值的部分 value 表示的鍊錶的...
《STL 原始碼剖析》 list 實現原理
目錄list對空間的運用是精準的,不浪費的。對於任何位置的元素插入 或 元素移除,list永遠是常數時間。list實現上就是乙個雙向迴圈鍊錶,list節點 有prev 和 next 兩個指標。因為list是乙個雙向鍊錶,他的迭代器就必須具備前移 後移的能力。list提供的是 bidirectiona...
List原始碼分析
list 是繼承colection的介面 我們主要學習他的實現類 arraylist 和 linkedlist arraylist是基於陣列實現的 與陣列不同的是 它可以存放不同的資料型別的資料而且長度不定 我們分析一下他的底程實現 新增過程 public boolean add e e 如何做到長...