表(List)的實現 算數學習(二)

2021-07-26 04:49:14 字數 1442 閱讀 6609

終於考完試到家啦,更新開始

上一次實現了vector,這一次實現list。

list是鍊錶,它有o(1)複雜度的出入刪除效率。但是同時它的查詢效率卻變成了o(n)的複雜度。

有利有弊,這才正常,下面那我們開始實現。

目標:鍊錶結構、結點結構的實現

迭代器的實現

多種構造方法

多種操作

要點:

struct node

, node* p = nullptr, node* n = nullptr)

:data, prev, next

node(object&& d, node* p = nullptr, node* n = nullptr)

:data, prev, next

};

這是鍊錶節點的結構,每乙個節點有兩個 指標分別指向它的前驅和後繼結點,data儲存我們想要儲存的資料,這也是list存在的目的。node 構造時預設將指向前乙個結點的指標和指向後乙個結點的指標指向空,這是方便鍊錶的方法呼叫node的建構函式增加結點。

private:

int thesize;

node* head;

node* tail;

void init()

鍊錶的私有成員包括鍊錶長度、鍊錶的頭指標、和鍊錶的尾指標,這是頭插和尾插必要的指標。list還包含乙個私有成員函式init(),在建構函式中呼叫,作用是新建乙個頭結點和乙個尾節點,這兩個節點不用來儲存資料,但他們的存在可以讓鍊錶中用來儲存資料的元素的地位相同,否則的話,第乙個儲存結點它將沒有前驅結點,卻有乙個頭指標指向它,而其它的結點是頭結點指向它,還要特殊處理第乙個結點的方法,多麻煩啊。尾節點同理。

protected:

node* current;

object& retieve() const

const_iterator(node* p): current

這是常指標迭代器的的私有成員,包含乙個當前迭代器指向的結點的指標。私有成員函式用來返回迭代器指向結點的儲存資料,它將在多個方法中被呼叫。

const_iterator operator++(int)

這是迭代器的遞增方法,通過檢視迭代器指向結點裡的指向的下乙個指標,實現迭代器的遞增。迭代器就像是沿著鏈條傳遞,乙個接著乙個。

iterator insert(iterator itr, const object& x)

}}

這是list的核心操作之一insert,可以在任何乙個位置插入元素,頭插和尾插也不過是,給insert的itr傳入預設的頭指標和尾指標罷了。他實現的原理是,先將鏈結開啟,再把待插入的元素放到到他們中間,然後把鏈結接好。

以上便是list的分析,匆匆寫就,紕漏很多,希望多多指教。

鍊錶 list 的巨集定義實現

看 是一種享受 最近在看dhcp的原始碼,一些好的記錄下來。平時寫c,用到鍊錶就是copy資料結構上的 簡單粗暴,今天換種方式,看下巨集定義實現的鍊錶,好處自然是 少 效率高。首先下面鍊錶巨集定義的實現,摘自wide dhcpv6 20080615原始碼包 比較難理解的可能是list entry中的...

鍊錶(list)的實現(c語言)

鍊錶是一種基本的資料結構,今天練習了一下,所以將 貼在下面,測試通過,還可以優化,我會過段時間就會增加一部分或者優化一部分直達 無法優化為止,我的所有資料結構和演算法都會用這樣的方式在部落格上面更新。include include struct node typedef struct node no...

Java之集合List的學習(二)

在初步學習了list集合類後,對list的三個子實現類也進行了學習。list三個子實現類分別是 arraylist,vector,linklist.特點 arraylist 底層資料結構式陣列結構,查詢塊,增刪慢 從記憶體角度考慮 執行緒不安全的,不同步的,執行效率高 vector 這是乙個執行緒安...