1. 程式人生 > >2、陣列(線性表)特點和應用分析

2、陣列(線性表)特點和應用分析

   在計算機記憶體組織中,只有兩種資料儲存的基本方式:陣列和連結串列。

<1>陣列管理

int  a[100];
//就是在記憶體中申請100個連續的sizeof(int)空間。
int *p = malloc(100*sizeof(int));
//在堆中申請100個連續的int空間。

  要對空間進行訪問:得到第10個成員。a[10],o(1)的成員訪問時間。

  例如:100個空間是無序的,查詢某一個數,必須遍歷,從0......99.

  如果在這100個空間中插入/刪除一個數組,需要將後面的所有成員後移/前移。

  a、訪問         時間複雜度:o[1]

        a[10]=>*(a+10)

  b、刪除/新增    不現實

<2> 陣列應用

  最大的應用,查詢表:基本不會新增/刪除成員,可以一次性訪問某個成員,藉助陣列下標的優越性.

   具體應用:要得到0~127這些範圍中某個數的二進位制碼中,從最低位開始,第一次出現1的bit位編號.例如:

   3____>>0000 0011 得到的值位bit0

  4____>>0000 0100   得到的值位bit2

  一個比較簡單的方法:

   data&0x01 =1,已經找到這個bit位編號

   否則:data >>1,迴圈檢測

   雖最多比較7次,但仍沒有辦法絕對的固定得到這個值的具體時間,可以構建一個表:

a[128]={-1,0,1,0,2,0,1,0,3....}
         0,1,2,3,4,5,6,7,8

  ret=a[n]

  能在確定的時間內得到期望的結果.

缺點:事先構建表,佔用記憶體空間.