1樓:網友
在嗎 速度把編譯時候出的錯 發出來 我現在沒工具 ``
雙向連結串列相比單連結串列的優勢
2樓:天羅網
從結構上來看,雙向連結串列可以支援 o(1) 時間複雜度的情況下找到前驅結點,雙向連結串列在某些情況下的插入、刪除等操作都要比單連結串列簡單、高效。
你可能會說,我剛講到單連結串列的插入、刪除操作的時間複雜度已經是 o(1) 了,雙向連結串列還。
能再怎麼高效呢?其實說單連結串列插入、刪除操作的時間複雜度為o(1)是不準確的,或者說是有先決條件的。
我們先來看刪除操作。
在實際的軟體開發中,從連結串列中刪除乙個資料無外乎這兩種情況:
對於第一種情況,不管是單連結串列還是雙向連結串列,為了查詢到值等於給定值的結點,都需要從。
頭結點開始乙個乙個依次遍歷對比,直到找到值等於給定值的結點,然後將其刪除。
儘管單純的刪除操作時間複雜度是 o(1),但遍歷查詢的時間是主要的耗時點,對應的時間複雜度為 o(n)。根據時間複雜度分析中的加法法則,刪除值等於給定值的結點對應的連結串列操作的總時間複雜度為 o(n)。
對於第二種情況,我們已經找到了要刪除的結點,但是刪除某個結點 q 需要知道其前驅結點,而單連結串列並不支援直接獲取前驅結點,所以,為了找到前驅結點,我們還是要從頭結點開始遍歷連結串列,直到 p->next=q,說明 p 是 q 的前驅結點。
但是對於雙向連結串列來說,這種情況就比較有優勢了。因為雙向連結串列中的結點已經儲存了前驅結點的指標,不需要像單連結串列那樣遍歷。所以,針對第二種情況,單連結串列刪除操作需要o(n) 的時間複雜度,而雙向連結串列只需要在 o(1) 的時間複雜度內就搞定了!
同理,如果我們希望在連結串列的某個指定結點前面插入乙個結點,雙向連結串列比單連結串列有很大的優勢。雙向連結串列可以在 o(1) 時間複雜度搞定,而單向連結串列需要 o(n) 的時間複雜度。
除了插入、刪除操作有優勢之外,對於乙個有序連結串列,雙向連結串列的按值查詢的效率也要比單連結串列高一些。因為,我們可以記錄上次查詢的位置 p,每次查詢時,根據要查詢的值與 p的大小關係,決定是往前還是往後查詢,所以平均只需要查詢一半的資料。
單連結串列和雙連結串列區別
3樓:舒適還明淨的海鷗
2、功能不同:單向連結串列只能next ,雙向連結串列可以return。
3、單雙向不同:單連結串列只能單向讀取,雙向連結串列可以通過prev()快速找到前一結點。
單向連結串列優缺點:1、優點:單向連結串列增加刪除節點簡單。遍歷時候不會死迴圈;
2、缺點:只能從頭到尾遍歷。只能找到後繼,無法找到前驅,也就是隻能前進。
雙向連結串列優缺點:1、優點:可以找到前驅和後繼,可進可退;
2、缺點:增加刪除節點複雜,多需要分配乙個指標儲存空間。
雙連結串列:linkedlist
單連結串列:hashmap
對於單連結串列,雙連結串列的優點都有哪些?
4樓:匿名使用者
單連結串列可以實現陣列不能實現的乙個功能(不知道具體長度時給定義),不是順序結構,在記憶體是隨機儲存。
也就是說,如果你用來定義乙個不知道大小的東西,例如 student 這個變數,如果用陣列來實現學生的記錄,那樣就必須給出陣列的大小,這個還好,數量給個 999999 就能搞定,但如果是 dna 呢?每個人都有一種,據說是不同的,這樣你怎麼儲存?那就用連結串列來實現,陣列的大小是 int 的最大值。
單向只能向後查詢,因為後面的沒有前面的位址記錄。簡單結構上,用這個就行。
如果需要雙向查詢,那就需要用到雙連結串列,這個要用兩個位址來做連線位置的記錄(乙個記錄下乙個的連線記憶體位址,另乙個是前面的。這樣就能實現雙向的移動).複雜的結構或者實現多功能的話,就用這個吧。
連結串列不是用單一的變數,而是用 結構體或類 的物件。這個要注意。
5樓:匿名使用者
單連結串列只能從前面往後查詢,雙連結串列可以從後面向前查詢。
6樓:匿名使用者
提供更加靈活的儲存方式,如二叉樹檢索。
7樓:電飯鍋
單向連結串列記憶體佔用比雙向的少。
雙向的在某些查詢中比單向的快,比如你有乙個節點,要找它的前節點。
單向連結串列的話,你必須從頭節點開始遍歷,而雙向連結串列的節點中本身就有前節點資訊。
用什麼取決你實際的需要。
與單連結串列相比,雙連結串列的優點之一是()。
8樓:科技點燈人
與單連結串列相比,雙連結串列的優點之胡雹一是()。
a.插入、鋒做橡刪除操作更簡單。
b.可以進行隨機訪問。
c.可以省略表頭指標或表尾指標。
d.訪問前後相鄰結點更方便。
正確答案:銀旁d
與單連結串列相比,雙連結串列的優點之一是()。
9樓:考試資料網
答案】:d對於插入、刪除操作單連結串列更簡單雹搭,因為需要改動的指標域少,而隨機訪問是順序表的特點。無論是單連結串列還是雙連結串列都要有表頭指標或表尾指標,在卜肆敬雙連結串列中可以訪問任一結點的前後相鄰結點,而單型慎連結串列中只能訪問任意結點的後繼結點。
連結串列的問題
linklist greatelist void 沒加星 你要返回頭指標 型別應該為結構體指標 return head linklist head 頭指標 和後面的return head對應,將掛有資料的連結串列頭位址作為函式返回值返回給函式呼叫者。s data ch 生成的新節點的data值為ch...
設指標變數p指向單鏈表中的結點A,現在需要刪去結點A,有哪些步驟,可以給我畫個圖讓我明白些嗎?急求
從head節點開始搜尋,找到a的前驅節點b,即b next a將a的前驅節點的後繼節點修改為a的後繼節點即b next a next 釋放a佔用的空間,即free a q p next p data q data p next q next free q 4.設指標變數p指向單鏈表中結點a,指標變數...
資料結構 將兩個有序的單鏈表合併成有序的單鏈表,要求用原
不管你是用什麼演算法給連結串列排序的,都可以用插入排序的方式將第二個連結串列插入到第乙個連結串列啊,include include define null 0 typedef struct lnode lnode linklist void createlist l linklist l,int n...