資料結構:陣列——最簡單最基礎的資料結構
阿新 • • 發佈:2018-12-13
王爭資料結構筆記(05)
1)線性表:
A)連結串列,佇列,棧,數都是線性表
B)每個線性表的資料只有前後兩個方向
2)非線性表:
A)二叉樹,堆,圖都是非線性表
B)資料之間不是前後關係
3)陣列支援隨機訪問,根據下標隨機訪問的時間複雜度是O(1)
4)插入與刪除
A) 向有序陣列中插入元素的平均時間複雜度(1+2+……+n)/n=O(n)
B) 向無序陣列中插入元素,只需要把第K個數據搬到陣列的最後,新元素放在第K個位置。這時插入元素的時間複雜度為O(1)
C)刪除有序陣列的平均時間複雜度為O(n)
D)特殊情景下,可以先記錄下已經刪除的資料,當陣列沒有空間儲存資料的時候,再將多次刪除操作集中執行,刪除效率會提高。——JVM標記清除垃圾回收演算法的思想
5)容器能否替代陣列
A)Java中的ArrayList的優勢:i)陣列操作細節封裝。ii)動態擴容
B)ArrayList無法儲存基本型別,如果關注效能,或者希望使用基本型別,選用陣列
C)表示多維陣列時使用陣列更為直觀。如Object[][] array;容器定義:ArrayList<ArrayList>array
6)陣列為何時從0開始編號
計算a[k]地址的算式:a[k]_address=base_address+k*type_size
如果從1開始計數,那麼a[k]_address=base_address+(k-1)*type_size
從1開始編號意味著每次隨機訪問陣列元素都多一次減法運算。對於CPU來說多了一個減法指令。
二維陣列的計算公式:二維陣列[n][m],a[i][j]_address=base_address+i*m*type_size+j*type_size,i<n,j<m