數據結構和算法:數組

1.什麼數組

數組(Array)是一種線性表數據結構,他用一組連續的內存空間,來存儲一組具備相同類型的數據。算法

關鍵詞1:線性表:數組、鏈表、棧、隊列等都是線性表結構;每一個線性表上的數據最多隻有前和後兩個方向。編程

關鍵詞2:連續的內存空間和相同類型的數據數組

因爲數組具備上述兩個限制,因此數組才具備殺手鐗般的特性:「隨機訪問」。網絡

數組數據的隨機訪問:數據結構

尋址公式:a[i]_address = base_address +i * data_type_size框架

數組與鏈表的區別:數組適合查找支持隨機訪問依據下標隨機訪問的時間複雜度爲O(1);鏈表適合插入和刪除,時間複雜度爲O(1)。數據結構和算法

2.容器是否能夠替代數組?

ArrayList最大的優點是能夠將數組才作的細節封裝起來,好比數組插入、刪除數據時須要搬移其餘數據等,另一個優點就是支持動態擴容編程語言

對於業務開發,直接使用容器就夠了,可是作一些很是底層的開發,好比開發網絡框架,須要將性能的優化作到極致,這時候數組就會優於容器成爲首選。post


3.爲何大多數編程語言中,數組要從0開始編號,而不是1?

從數組的內存模型來看,「下標」最確切的定義應該是「偏移(offset)」。若用a表示數組的首地址a[0]就是偏移爲0的位置a[k]就是偏移k個type_size的位置,因此計算a[k]的地址的公式爲:性能

a[k]_address = base_address + k * type_size

可是若是數組從1開始計數的話,尋址公式就會變成:

a[k]_address =base_address + ( k-1 ) * type_size

對比這兩個公式能夠發現,從1開始編號,每次隨機訪問數組元素都多了一次減法運算,對於CPU來說,就是多了一次減法指令


二維數組a[m][n]的內存尋址公式:

a[i][j]_address =base_address + ( i * n + j ) * type_size


下一篇:數據結構和算法:鏈表(上)

相關文章
相關標籤/搜索