數據結構與算法篇 數組

1 什麼是數組?

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

內存地址計算公式:a[i]_address = base_address + i * data_type_size (data type size就是數據類型,假如是int類型就4字節)。

 

2 什麼是線性表與非線性表?

線性表:數據排成一條線一樣的結構,最多隻有前和後兩個方向,例如數組,鏈表,隊列,棧等等。

非線性表:數據不是簡單的前後關係,例如二叉樹,堆,圖等等

 

3 數組的特點與優點?

從概念我們可以看出來是的連續的內存空間和相同類型的數據這兩個特點,數組支持隨機訪問,根據下標隨機訪問的時間複雜度爲O(1),需要注意的是,即使數組是排好序的,進行二分查找也需要O(log n)的時間複雜度。

它的缺點是低效的插入和刪除,簡單的來說,最好的時間複雜度是O(1),最壞的時間複雜度是O(n),平均時間複雜度是O(n),也有些特殊情況是不一樣的。

 

4 關於插入和刪除有那些特殊的操作?

插入:如果數組中的數據是有序的,我們在某個位置插入一個新的元素的時候,必須搬移n位數據;但是如果存儲數據沒有任何規律,數組只是單純的一個存儲集合,直接將第k位的數據移到數組元素的最後,新的元素放在第k位。

 

刪除:如果在刪除數據的時候我們不追求數組數據的連續性,我們可以將多次刪除操作一起執行,等到數組沒空間的時候再去執行刪除操作。JVM標記清楚垃圾回收算法的核心思想。
 
5 爲什麼數組是從0開始計數?
從數組存儲的模型來看,“下標”的最切確的定義是偏移“offset”,a[0]就是0偏移,a[k]就是偏移爲k
內存地址計算公式:a[i]_address = base_address + i * data_type_size (data type size就是數據類型,假如是int類型就4字節)。
當然你想要搞成從1計數也是可以的,除非你改成a[i]_address = base_address + (i-1) * data_type_size,
但是同時你也會發現一個問題,每次訪問數組的時候,cpu都需要做多一次額外的減法指令,數組作爲非常基礎的數據結構,當然越簡潔越好。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章