**陣列**
陣列是一種佔據連續記憶體並按順序儲存資料的簡單的資料結構。建立陣列時,需要首先指定陣列的容量,然後依據大小分配記憶體。由於有時候我們需要使用陣列的容量不確定,可能開闢的記憶體遠超實際使用的記憶體,所以陣列的空間效率不好。
由於陣列在記憶體中是連續的儲存空間,所以它的時間效率很高,可以在o(1)的時間讀寫資料。根據這一特性,可以用陣列實現簡單的雜湊表,這樣陣列下標就形成了鍵值-數值對。
c++的stl中動態陣列vector有效的解決了陣列的空間利用率問題,但可能影響了時間效率。
陣列與指標
陣列名是常量指標(位址常量),一般的指標則是變數(位址變數)。
1.執行下列**,請問輸出是什麼?
int getsize(int data)
int _tmain(int argc, _tchar* argv);
int size1 = sizeof(data1);
int* data2 = data1;
int size2 = sizeof(data2);
int size3 = getsize(data1);
printf(「%d
%d%d」,size1, size2, size3);
return
0; }
結果:20
44
data1是陣列,sizeof(data1)是求陣列的大小,data2是指標,在32位的系統上,所有的指標大小都是4個位元組,當陣列作為函式引數是,陣列自動退化成同型別的指標。
2.在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
例如下面的二維陣列就是每行、每列都遞增排序。如果在這個陣列中查詢數字7,則返回true;如果查詢數字5,由於陣列不含有該數字,則返回false。
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
思路
128
1224
9242
44710
4747
4768
11686
868 (a) (b) (c) (d)
首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個這個數字所在的行。也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或者一列,這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,或者查詢範圍為空。
bool find(int *matrix, int rows, int columns, int number)else
if(matrix[row * columns + column] > number)else
++row;
}
}return found;
}
測試用例:
(1)二維陣列中包含查詢的數字(查詢的數字是陣列中的最大值和最小值,查詢的數字介於陣列中的最大值和最小值之間)
(2)二維陣列中沒有查詢的數字(查詢的數字大於陣列中的最大值,查詢的數字大於陣列中的最小值,查詢的數字在陣列的最大值和最小值之間但陣列中沒有這個數字)。
(3)特殊輸入測試(輸入空指標)。
資料結構 陣列
建立陣列 大小為50 棧空間存myarray引用 堆空間存乙個大小為50,預設值為0的陣列。棧空間myarray引用指向堆空間該陣列。int myarray new int 50 public class testarray public class testarray if s intarray....
資料結構 陣列
陣列 就是相同型別的資料按一定順序排列的集合,把有限個型別相同的資料元素用乙個名字表示,通過編號來區分。名字即為陣列名,編號即為下標。陣列是最簡單 使用最廣泛的一種資料結構,其實就是一塊連續的記憶體,哪怕物理上不連續,邏輯上也是連續的,連續存放著一組相同型別資料元素。陣列的定義 type 變數名 n...
資料結構 陣列
陣列的基本特點 1.陣列是乙個容器,可以儲存 個同一型別的資料 2.陣列是一種資料結構,是資料結構中訪問速度最快的 3.陣列屬於引用資料型別,即陣列名中儲存的是記憶體的首位址 4.陣列本身只有長度屬性 陣列中能儲存的資料個數 但是有從物件父類繼承的屬性和方法 5.陣列可以分為一維陣列,二維陣列,陣列...