連結串列主要是便於管理長度或數量不確定的資料,相對於陣列,連結串列處理這種資料時比較節省記憶體。動態語言通常不大需要連結串列,因為動態語言的直譯器幫你管理記憶體,但當你對空間效率或插入動作的效率有特殊要求時也可在動態語言中使用連結串列。連結串列常用於在程式中臨時儲存一組不定長的線性資料。具有這樣的特點的資料可以用連結串列來儲存:
1,資料是逐漸增加的
2,資料是不定長的,在儲存第一個資料之前難以確定一個將來一共需要儲存多少資料的上限,或者雖然可以確定上限,但這個上限又比通常大部分情況下資料可能達到的長度要大得多,因而一次性按照上限把空間分配好是不划算的。而連結串列則可以在每次需要增加新資料時才為之申請記憶體,不會造成浪費,也不會因一次申請不足而使資料的數量受到限制。
3,不需要按照序號對資料進行隨機訪問。C++ STL 中提供了list容器,就是連結串列。同時STL還提供了vector容器,也可以用於處理具有上述特點的資料,而且vector還支援隨機訪問(即可以不考慮上述第3點要求)。但vector在增加資料時,如果原先分配的連續記憶體已經用完則需要重新分配記憶體並把原有資料複製過去,這時它的插入資料的動作時間複雜度就不是O(1)了(不是常量時間了)。因而,連結串列適於處理的資料除了具有上述特點外,如果還有如下第4點特徵,則以連結串列為最佳選擇了:
連結串列主要是便於管理長度或數量不確定的資料,相對於陣列,連結串列處理這種資料時比較節省記憶體。動態語言通常不大需要連結串列,因為動態語言的直譯器幫你管理記憶體,但當你對空間效率或插入動作的效率有特殊要求時也可在動態語言中使用連結串列。連結串列常用於在程式中臨時儲存一組不定長的線性資料。具有這樣的特點的資料可以用連結串列來儲存:
1,資料是逐漸增加的
2,資料是不定長的,在儲存第一個資料之前難以確定一個將來一共需要儲存多少資料的上限,或者雖然可以確定上限,但這個上限又比通常大部分情況下資料可能達到的長度要大得多,因而一次性按照上限把空間分配好是不划算的。而連結串列則可以在每次需要增加新資料時才為之申請記憶體,不會造成浪費,也不會因一次申請不足而使資料的數量受到限制。
3,不需要按照序號對資料進行隨機訪問。C++ STL 中提供了list容器,就是連結串列。同時STL還提供了vector容器,也可以用於處理具有上述特點的資料,而且vector還支援隨機訪問(即可以不考慮上述第3點要求)。但vector在增加資料時,如果原先分配的連續記憶體已經用完則需要重新分配記憶體並把原有資料複製過去,這時它的插入資料的動作時間複雜度就不是O(1)了(不是常量時間了)。因而,連結串列適於處理的資料除了具有上述特點外,如果還有如下第4點特徵,則以連結串列為最佳選擇了: