1.雙鏈表資料結構
list
和deque
介面的雙鏈表實現。[…] 所有的操作都能像雙向列表那樣執行。索引該列表中的操作將從頭或者尾遍歷列表,使用更接近指定索引的那個。
linkedlist
物件包含指向列表的第乙個和最後乙個元素的鏈結。
所以我們可以從列表的任意一端開始,並以任意方向遍歷它。因此,我們可以在常數時間內,在列表的頭部和末尾新增和刪除元素!
2.arraylist,linkedlist和雙鏈表的對比
myarraylistmylinkedlist雙鏈表
add
(末尾)1n
1add
(開頭)
n(剩餘的都往後)11
add
(一般)nn
nget
/set
1nn
indexof
/lastindexof
nnn
isempty
/size
111
remove
(末尾)1n
1remove
(開頭)n1
1remove
(一般)nn
n3.結構的選擇
對於頭部插入和刪除,雙鏈表的實現優於arraylist
。對於尾部插入和刪除,都是一樣好。所以,arraylist
唯一優勢是get
和set
,鍊錶中它需要線性時間,即使是雙鏈表(根據實際需要解決的問題來看)。
如果你知道,你的應用程式的執行時間取決於get
和set
元素的所需時間,則arraylist
可能是更好的選擇。如果執行時間取決於在開頭或者末尾附加新增和刪除元素,linkedlist
可能會更好。
但請記住,這些建議是基於大型問題的增長級別。還有其他因素要考慮:
總而言之,演算法分析為資料結構的選擇提供了一些指南,但只有:
作為一名軟體工程師,在較長的職業生涯中,你幾乎不必考慮這種情況。
Early Orders 資料結構 思維
early orders 資料結構 思維 題目大意 給你乙個序列,讓你找乙個字典序最小的子串行,要求這子串行是乙個前k個數的全排列。題解 難度不太,冷靜思考。我用的優先佇列寫的,寫起來還是有點噁心,碼量不大,要注意很多細節。include define lson id 1 define rson i...
資料結構筆記 雙鏈表
單鏈表從某個結點出發只能順指標向後尋查其他的結點。若要尋查結點的直接前驅,則必須從表頭指標出發。位克服單鏈表的單向性的缺點,可利用雙鏈表。雙鏈表的模型 typedef struct nodenode,linklist 雙鏈表也可以有迴圈表 bool initlinklist linklist l l...
資料結構思維筆記(十)Map介面
在接下來的幾個練習中,我介紹了map介面的幾個實現。其中乙個基於雜湊表,這可以說是所發明的最神奇的資料結構。另乙個是類似的treemap,不是很神奇,但它有附加功能,它可以按順序迭代元素。我們從乙個map開始,它使用鍵值對的list實現。1.實現mylinearmap 簡單來說,就是繼承map,放入...