1. 程式人生 > >資料結構(一)

資料結構(一)

1.資料結構---資料在計算機中的儲存和組織。

物理結構:線性儲存和鏈式儲存。

邏輯結構:資料的關係和聯絡,線性結構和非線性結構(樹一對多,前繼,後驅)。

資料結構和演算法是伴生的,演算法定義了資料的操作,操作資料。

沒有最好,只有最合適---真相不只有一個。

2.時間複雜度:核心演算法程式碼的執行次數。O(1)代表常數操作;O(n):n/c或a*n+c次操作。

3.動態記憶體申請(堆記憶體,要手動釋放)。

4.記憶體洩露,申請的記憶體沒有在用中卻沒釋放。

5.二維陣列的地址代表的含義,指標表示。

陣列名與地址。

例如:a[3][3],a[0]代表“由4個整型元素所組成的一維陣列”的首地址。

a[0],a[1],a[2]既然是一維陣列名,則a[0]代表一維陣列a[0]中第0列元素的地址,即&a[0][0];同理a[1]的值是&a[1][0],a[2]的值是&a[2][0];

那麼a陣列0行1列元素的地址怎麼表示呢?a[0]是一維陣列名,該一維陣列中序號為1的元素的地址顯然應該用a[0]+1來表示。

前已敘述,a[0]和*(a+0)等價,a[i]和*(a+i)等價.因此a[0]+1和*(a+0)+1都是&a[0][1].進一步分析,a[0][1]的值則為*(a[0]+1),*(*(a+0)+1)或者*(*a+1).

通用的表示:*(a[i]+j),*(*(a+i)+j)是a[i][j]的值.可以這樣理解:行指標a縱向移動i到達到a+i,然後解引用得到*(a+i),即a[i]——列指標,然後列指標a[i]橫向移動j步到達(a[i]+j)),最後解引用得到*(a[i]+j),即a[i][j]。

二維陣列元素的地址