1. 程式人生 > >資料結構:陣列——最簡單最基礎的資料結構

資料結構:陣列——最簡單最基礎的資料結構

王爭資料結構筆記(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