步步爲營(八)常用數據結構(1)STL-List(雙端鏈表)

額,這個真的有必要說麼~~

鏈表是空間動態分配的,內存不連續,不能隨機進行訪問和儲存的結構。

鏈表的存儲方式註定了鏈表在查找時面臨着O(n)的時間複雜度,雖然看起來不算很大,但是這是單次查找的複雜度,如果要進行稍微複雜一點的操作,複雜度便很可能會飆升到O(n^2),這個複雜度真的會死人的……

不過鏈表的優點也很明顯,如果程序對隨機存儲(也可以理解爲下標式操作)的效率要求不高,那麼使用鏈表存儲數據比用數組空間縮小了不少,而且插入、刪除之類的操作也方便很多(複雜度O(1),簡直不要太快)。因爲如果你要刪除一個元素,只需要修改元素左右兩個結點的指針,然後釋放空間就行了。

STL裏有List容器,而且是一個帶頭節點的環狀雙向鏈表。這種結構對於有大量插入或刪除操作的程序來說,效率提升很大。

同時注意,由於List不支持隨機訪問,所以STL的sort()函數不能對list使用,List容器自帶了sort()方法。

下面附上list成員函數說明:

constructor 構造函數

destructor 析構函數

operator= 賦值重載運算符

assign() 分配值

front() 返回第一個元素的引用

back() 返回最後一元素的引用

begin() 返回第一個元素的指針(iterator)

end() 返回最後一個元素的下一位置的指針

rbegin() 返回鏈表最後一元素的後向指針(reverse_iterator or const)

rend() 返回鏈表第一元素的下一位置的後向指針

push_back() 增加一元素到鏈表尾

push_front() 增加一元素到鏈表頭

pop_back() 刪除鏈表尾的一個元素

pop_front() 刪除鏈表頭的一元素

clear() 刪除所有元素

erase() 刪除一個元素或一個區域的元素(兩個重載)

remove()  刪除鏈表中匹配值的元素(匹配元素全部刪除)

remove_if() 刪除條件滿足的元素(遍歷一次鏈表),參數爲自定義的回調函數

empty() 判斷是否鏈表爲空

max_size() 返回鏈表最大可能長度

size() 返回鏈表中元素個數

resize() 重新定義鏈表長度(兩重載函數)

reverse() 反轉鏈表

sort() 對鏈表排序,默認升序

merge() 合併兩個有序鏈表並使之有序

splice() 對兩個鏈表進行結合(三個重載函數) 結合後第二個鏈表清空

insert() 在指定位置插入一個或多個元素(三個重載函數)

swap() 交換兩個鏈表(兩個重載)

unique() 刪除相鄰重複元素 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章