從全域性視角看資料結構

快樂的提千萬發表於2022-02-20

計算機的本質就是為了處理資料,資料運算的時候是放在記憶體中的,由於計算機的特性,儲存只有兩種方式:

  • 順序結構:儲存在連續的記憶體上。
  • 鏈式結構:儲存在不連續的記憶體上。

物理結構

順序結構

順序結構的原始模型就是陣列,由於存放的都是同一種資料,比如int,每個資料佔用的記憶體單元是一致的,那麼當我們知道首地址之後就可以推匯出任意位置的地址(等差數列)。這就是隨機訪問。

  • 順序結構的優勢在於隨機訪問很快。

但是由於需要連續記憶體,當我們插入、刪除一個元素的時候,就要移動後面的元素。

  • 順序結構的劣勢就在於插入刪除比較慢。

鏈式結構

鏈式結構的原始模型是連結串列,我們增加一個指標記錄下一個元素的地址,這樣就不用放在連續的記憶體上,當我們插入刪除的時候,只需要處理前後元素即可。

  • 鏈式結構的優勢在於新增、刪除很快。

但是由於不連續,我們無法用公式推匯出第N個元素的位置,隨機訪問只能通過遍歷。

  • 鏈式結構的劣勢在於隨機訪問很慢。

小結

由於計算機設計的限制,我們只有兩種物理結構去儲存資料,如果有一天我們的計算機模型變化了,一切都會跟著變。

邏輯結構

怎麼放記憶體是一回事,怎麼處理他們又是一回事,怎麼處理就叫邏輯結構。

比如:

  • 棧:先進先出。
  • 佇列:後進先出。
  • 樹:將連結串列從一維拉到了二維,是一對多。
  • 圖:也是拉到了二維,是多對多。

邏輯結構都可以用兩種物理結構去實現,只是有優劣之分。

為了解決物理結構的劣勢,人們也發明了很多演算法去優化資料結構。

資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。

比如,為了解決連結串列的遍歷慢,發明了跳躍表、二叉樹等。為了解決陣列的插入快慢問題,發明了雜湊表+拉鍊法。

總之,都是充分利用陣列的隨機訪問快,連結串列的插入、刪除快。

總結

image.png

相關文章