1. 程式人生 > >順序表、單鏈表、雙鏈表的差異

順序表、單鏈表、雙鏈表的差異

順序表由於順序存放,拿到查詢的值就能拿到查詢值的上一個和下一個值,即可以直接返回查詢的值的位置(索引號)。

單鏈表在查詢的時候無論是按值還是按節點查詢,就算拿到了那個節點或值,只能得到下一個節點的位置,而無法得到上一個節點的位置,即無法修改上一個節點的位置,因此只能迴圈遍歷。

雙鏈表如果按照值搜尋的話,通過值是無法拿到上一個節點和下一個節點的位置的,而如果按照節點刪除的話,能直接拿到上一個節點和下一個節點的位置,就能達到O(1)的操作。

刪除和增加的前提都是查詢,這樣看貌似連結串列的查詢要慢很多,那為什麼還提倡用連結串列進行刪除和插入操作呢?其實很簡單,因為我們在順序表查詢的時候雖然是O(1)時間,但是我們在刪除和增加的時候還需要移動刪除值的後面所有元素,移動插入值的後面的所有值,這樣空間上的時間會造成極大的浪費。

好了,那這樣看雙鏈表貌似更加完美,但是我們忽略了一個很重要的點,雙鏈表的節點造出來是要花很大的記憶體代價的,他的每個節點都有兩個指標,而一旦資料大了他的指標數過多,每個指標還佔有8個位元組數,那麼他在很大程度上其實是不如單鏈表好的。(有興趣的同學自己深入研究)

做個總結吧。如果我們對一組資料僅僅做查詢操作,那麼順序表一定是最好不過的,但是如果我們涉及到刪除和插入操作的時候,這個時候就不得不犧牲一點空間換取時間了,畢竟演算法就是在時間和空間上權衡。