1. 程式人生 > >【 C 】經典抽象資料型別(ADT)之記憶體分配

【 C 】經典抽象資料型別(ADT)之記憶體分配

C中的一些抽象資料型別(ADT)如連結串列、堆疊、佇列和樹等,連結串列已經在前幾篇博文有所討論,見:

後面的博文會相繼討論堆疊、佇列和樹的一些基本的相關知識!

下面記錄一個最基本的問題,記憶體分配問題:

所有的 ADT 都必須明確一個問題,如何獲取記憶體來儲存值,前面提到的連結串列,包括單鏈表和雙鏈表都是通過動態記憶體分配來儲存連結串列值的,事實上,方法不止於此,還有靜態陣列和動態分配的鏈式結構!

靜態陣列和動態分配的陣列都比較好理解,也比較相似,最後一個動態分配的鏈式結構需要下點功夫。(個人認為如此!)

下面分別簡單介紹:

靜態陣列要求結構的長度固定。而且,這個長度必須在編譯時確定。但是這個方案最為簡單,而且最不容易出錯。

動態陣列,可以在執行時才決定陣列的長度。而且,如果需要的話,你可以通過分配一個新的、更大的陣列,把原來陣列的元素複製到新陣列中,然後刪除原先的陣列,從而達到動態改變陣列長度的目的。在決定是否採用動態陣列時,你需要在由此增加的複雜性和隨之產生的靈活性(不需要一個固定的、預定確定的長度)之間作一番權衡!

動態分配記憶體的相關博文:

最後,鏈式結構提供最大程式的靈活性。每個元素在需要時才單獨分配,所以除了不能超過機器的可用記憶體之外,這種方式對元素的數量幾乎沒有什麼限制。但是鏈式結構的連結欄位需要消耗一定的記憶體,在鏈式結構中訪問一個特定元素的效率不如陣列。