C有沒有結合了陣列和連結串列優點的容器

時間 2022-02-12 08:35:13

1樓:揭清妙

c++語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前有時無法準確確定陣列的大小,只能將陣列定義成足夠大小,這樣陣列中有些空間可能不被使用,從而造成記憶體空間的浪費。

連結串列是一種常見的資料組織形式,它採用動態分配記憶體的形式實現。需要時可以用new分配記憶體空間,不需要時用delete將已分配的空間釋放,不會造成記憶體空間的浪費。

a 從邏輯結構來看

a-1. 陣列必須事先定義固定的長度(元素個數),不能適應資料動態地增減的情況。當資料增加時,可能超出原先定義的元素個數;當資料減少時,造成記憶體浪費。

a-2. 連結串列動態地進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項。(陣列中插入、刪除資料項時,需要移動其它資料項)

b 從記憶體儲存來看

b-1. (靜態)陣列從棧中分配空間, 對於程式設計師方便快速,但是自由度小

b-2. 連結串列從堆中分配空間, 自由度大但是申請管理比較麻煩.

2樓:華夢瞬逝

你確定平衡樹不好用?

#include

using namespace std;

int main()

陣列與連結串列在運用中各有什麼優缺點

3樓:匿名使用者

1.陣列:

陣列是將元素在記憶體中連續存放,由於每個元素佔用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要

在陣列中增加一個元素,需要移動大量元素,在記憶體中空出一個元素的空間,然後將要增加的元素放在其中。同樣的

道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。如果應用需要快速訪問資料,很少插入和

刪除元素,就應該用陣列。

2.連結串列:

連結串列中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起,每個結點包括兩個部分:一個是存

儲資料元素 的資料域,另一個是儲存下一個結點地址的 指標。如果要訪問連結串列中一個元素,需要從第一個元素始,

一直找到需要的元素位置。但是增加和刪除一個元素對於連結串列資料結構就非常簡單了,只要修改元素中的指標就可以

了。如果應用需要經常插入和刪除元素你就需要用連結串列。

3.區別:

(1)儲存位置上:

陣列邏輯上相鄰的元素在物理儲存位置上也相鄰,而連結串列不一定;

(2)儲存空間上:

連結串列存放的記憶體空間可以是連續的,也可以是不連續的,陣列則是連續的一段記憶體空間。一般情況下存放相同多的數

據陣列佔用較小的記憶體,而連結串列還需要存放其前驅和後繼的空間。

(3)長度的可變性:

連結串列的長度是按實際需要可以伸縮的,而陣列的長度是在定義時要給定的,如果存放的資料個數超過了陣列的初始大

小,則會出現溢位現象。

(4)按序號查詢時,陣列可以隨機訪問,時間複雜度為o(1),而連結串列不支援隨機訪問,平均需要o(n);

(5)按值查詢時,若陣列無序,陣列和連結串列時間複雜度均為o(1),但是當陣列有序時,可以採用折半查詢將時間復

雜度降為o(logn);

(6)插入和刪除時,陣列平均需要移動n/2個元素,而連結串列只需修改指標即可;

(7)空間分配方面:

陣列在靜態儲存分配情形下,儲存元素數量受限制,動態儲存分配情形下,雖然儲存空間可以擴充,但需要移動大量

元素,導致操作效率降低,而且如果記憶體中沒有更大塊連續儲存空間將導致分配失敗; 即陣列從棧中分配空間,,對

於程式設計師方便快速,但自由度小。

連結串列儲存的節點空間只在需要的時候申請分配,只要記憶體中有空間就可以分配,操作比較靈活高效;即連結串列從堆中分

配空間, 自由度大但申請管理比較麻煩。

c++中陣列,連結串列和vector等容器之間的區別

4樓:藍筆小心的故事

c++ stl 提供了3個序列容器 :vector, deque, list

vector 中的元素是順序存放的,所以隨機訪問很快,但是要插入和刪除,這個時間複雜度就很高了,vector初始化時有一個capacity,如果元素個數超出capacity,那vector就會重新分配一個新的空間,並把舊值複製到新的空間中,釋法原空間,這個也要耗費很多時間,所以如果你知道元素的最大值,最好用reserve()函式初始最大空間,避免重新分配空間造成的時間。

deque 幾乎所有的操作都和vector一樣,出了可以在頭新增和刪除,多了個push_front(), pop_front();

list 是雙連結串列,元素在記憶體中是分散的不連續的,它使用指標left,right,指向前一個元素和後一個元素。所以要刪除和新增只要動動指標,所以很快,但是因為是不連續的所以要訪問一個元素,你只能遍歷序列。

連結串列和陣列的區別 各有什麼優缺點

5樓:硫硝酸酸雨

陣列定義簡單,以連續的變數形式儲存,不可以減少或新增任何變數,因此在定義時必須已知長度,可能造成陣列不夠長或記憶體浪費的情況;

連結串列以結構體的自引用為原理,可以在記憶體中以不連續的方式儲存,並動態分配記憶體,即隨時加入或刪除一個變數。但連結串列定義比較複雜,且除頭結點外每一個結點都沒有名

字,引用起來比較辛苦。如果是已知所需變數數,還是陣列方便些。

在C語言中陣列和連結串列有什麼區別

要說這個區別,你要先知道資料結構。要說清楚資料結構要一本書的內容,所以我只能抽個直接相關的東東來說一下 線性表。線性表 邏輯上 是一張二維表,裡面有元素和相應元素的位置。物理上 線性表以兩種形式在記憶體中存放 順序表和鏈式表。這順序表要求 在記憶體中連續的記憶體地址存放。可看成陣列 而鏈式表不要求以...

除法有沒有分配律,除法有沒有分配律和結合律

不能籠統的說分配律,實際上一般所說的乘法分配律是指實數的乘法對實數的加減法滿足分配律 即a b c a b a c b c a b a c a 但注意到加法對乘法沒有分配律 如a b c 不等於 a b a c 除法沒有分配律,有一個最大的原因是乘法可交換,而除法不能交換 如對任意的a,b,有a b...

C盤空間和程式對網速有沒有影響啊

執行程式快慢主要與您處理器的速度以及實體記憶體的大小有很大關係,與虛擬記憶體的關係不大,但是如果虛擬記憶體過小的話會導致一些程式執行緩慢 更改方法是 我的電腦屬性,高階,效能設定,高階,更改,一般設定為實體記憶體的1.5 2.5倍就可以了,不用設定過大。網速的快慢主要取決於您在電信服務公司申請的業務...