數組是線性結構,能夠直接索引,即要去第i個元素,a[i]便可。鏈表也是線性結構,要取第i個元素,只需用指針日後遍歷i次就可。貌似鏈表比數組還要麻煩些,並且效率低些。數組
想到這些相同處中的一些細微的不一樣處,因而他們的真正不一樣處漸漸顯現了:鏈表的效率爲什麼比數組低些?先從二者的初始化開始。數組無需初始化,由於數組的元素在內存的棧區,系統自動申請空間。而鏈表的結點元素在內存的堆區,每一個元素須手動申請空間,如malloc。也就是說數組是靜態分配內存,而鏈表是動態分配內存。鏈表如此麻煩爲什麼還要用鏈表呢?數組不能徹底代替鏈表嗎?回到這個問題只需想一想咱們當初是怎麼完成學生信息管理系統的。爲什麼那時候要用鏈表?由於學生管理系統中的插入,刪除等操做都很靈活,而數組則大小固定,也沒法靈活高效的插入,刪除。由於堆操做靈活性更強。數組每次插入一個元素就須要移動已有元素,而鏈表元素在堆上,無需這麼麻煩。指針
說了這麼多,數組和鏈表的區別整理以下:索引
數組靜態分配內存,鏈表動態分配內存;內存
數組在內存中連續,鏈表不連續;效率
數組元素在棧區,鏈表元素在堆區;遍歷
數組利用下標定位,時間複雜度爲O(1),鏈表定位元素時間複雜度O(n);鏈表
數組插入或刪除元素的時間複雜度O(n),鏈表的時間複雜度O(1)。移動