2、陣列(線性表)特點和應用分析
阿新 • • 發佈:2018-12-05
在計算機記憶體組織中,只有兩種資料儲存的基本方式:陣列和連結串列。
<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]
能在確定的時間內得到期望的結果.
缺點:事先構建表,佔用記憶體空間.