鍊錶與陣列

2021-10-01 15:08:38 字數 1650 閱讀 8094

兩者的區別:

1.陣列靜態分配記憶體,鍊錶動態分配記憶體。

2.陣列在記憶體中是連續的,鍊錶是不連續的。

3. 陣列利用下標定位,查詢的時間複雜度是o(1),鍊錶通過遍歷定位元素,查詢的時間複雜度是o(n)。

4.陣列插入和刪除需要移動其他元素,時間複雜度是o(n),鍊錶的插入或刪除不需要移動其他元素,時間複雜度是o(1)。

陣列的優點

1.隨機訪問性比較強,可以通過下標進行快速定位。

2.查詢速度快。

陣列的缺點

1.插入和刪除的效率低,需要移動其他元素。

2.會造成記憶體的浪費,因為記憶體是連續的,所以在申請陣列的時候就必須規定七記憶體的大小,如果不合適,就會造成記憶體的浪費。

3.記憶體空間要求高,建立乙個陣列,必須要有足夠的連續記憶體空間。

4.的大小是固定的,在建立陣列的時候就已經規定好,不能動態拓展。

鍊錶的優點

1.插入和刪除的效率高,只需要改變指標的指向就可以進行插入和刪除。

2.記憶體利用率高,不會浪費記憶體,可以使用記憶體中細小的不連續的空間,只有在需要的時候才去建立空間。隨時動態分配空間,大小不固定,拓展靈活。

鍊錶的缺點

1.查詢的效率低,鍊錶的查詢是從第乙個結點開始依次向後遍歷。

鍊錶中另外點:

1.malloc()函式

malloc函式是一種申請儲存空間的函式,其函式原型為:

void *malloc(unsigned size);

函式功能:分配長度為size個位元組的記憶體塊。(在記憶體的動態儲存區申請乙個長度為size位元組的連續儲存空間)

返回值:返回指向新分配記憶體塊首位址的指標;若沒有足夠的記憶體空間可分配,返回null。

說明:函式值為指標型別,由於基型別為void,如果要將這個指標賦給其它型別的指標變數,應當進行強制型別轉換。

例如:int *p = (int *)malloc(sizeof(int));

申請乙個int型長度的儲存空間,並將分配到的村儲存空間位址轉換為int型別位址,賦給所定義的指標變數p,基型別位元組數為int型所佔空間2或4(有不同的機器決定)。

例如:struct stud p = (struct stud)malloc(sizeof(struct stud));

申請可存放struct stud結構體型別資料的空間,將其位址存入p指標中,當struct stud結構體型別的定義改變時,本語句申請空間的大小會隨之改變,使程式便於適應不同的機器,程式適應性增強。

2.free()函式

free函式是一種釋放儲存空間的函式,其函式原型為:

void free(void *p);

函式功能:將指標變數p指向的儲存空間釋放,交還給系統。

無返回值。

3.鍊錶

鍊錶分為單鏈表,迴圈鍊錶,雙向鍊錶。

單鏈表:

如果每個結點只含有乙個指標,所有結點都是單線聯絡,除了末尾結點指標為空外,每個結點的指標都指向下乙個結點,一環扣一環形成一條線性鏈,稱此鍊錶為單項線性鍊錶或簡稱單鏈表。

陣列與鍊錶

陣列和鍊錶簡介 在計算機中要對給定的資料集進行若干處理,首要任務是把資料集的一部分 當資料量非常大時,可能只能一部 分一部分地讀取資料到記憶體中來處理 或全部儲存到記憶體中,然後再對記憶體中的資料進行各種處理。例如,對於資料集 s,要求 s 中元素的和,首先要把資料儲存到記憶體中,然後再將記憶體中的...

陣列與鍊錶

陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊 單向的乙個,雙向鍊錶的話,會有兩個 優點 使用方便 查詢效率 比煉表高,記憶體為一連續的區域 缺點 大小固定,不適合動態儲存,不方便動態新增 優點 可動態新增刪除 大小可變 缺點 只...

陣列與鍊錶

使用陣列意味著所有待辦事項在記憶體中都是相連的 緊靠在一起的 所以在陣列中新增新元素也可能很麻煩。如果沒有了空間,就得移到記憶體的其他地方,因此新增新元素的速度會很慢。一種解決之道是 預留座位 即便當前只有3個待辦事項,也請計算機提供10個位置,以防需要新增待辦事項。這樣,只要待辦事項不超過10個,...