1.陣列的優缺點:
佔據一塊連續的記憶體,指定陣列的大小,根據大小分配記憶體大小。
因為陣列是連續儲存的,所以對於陣列的查詢和讀寫,時間效率較高。但又因為陣列是連續存放的,記憶體分配容易造成浪費,空間效率不高
2.陣列與指標的關係
先看**:
#include using namespace std;
int getsize(int data)
int main()
; int size1 = sizeof(data1);
int* data2 = data1;
int size2 = sizeof(data2);
int size3 = getsize(data1);
printf("%d, %d, %d\n", size1, size2, size3);
system("pause");
return 0;
}
執行結果為:
從中我們可以看出來,size1為20,是data1陣列的大小,data1有5個元素,每個元素佔4個位元組,所以整個陣列的大小為20;size2為4是什麼原因呢,是因為陣列名也是乙個指標,指向陣列第乙個元素,所以我們也可以定義指標來訪問陣列,但不能超越陣列大小。指標data2指向陣列data1,也就是指向陣列的第乙個元素(1),因為指標data2也是int型,在32位運算模式下,所以sizeof(data2)為4(指標的大小只會跟運算模式的位數有關,與指向資料的型別無關,不管是char、int、float、double,32位下指標大小都是4位元組,64位下為8位元組);而size3也為4,就說明了,函式之間傳遞的也是指標,getsize函式裡面的引數data,也是作為指標處理的,所以size3也是4
3.演算法實列
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。陣列如下,查詢陣列中是否包含整數7
演算法思想:從右邊開始看第一列(9,12,13,15),我們發現這一列中的第乙個數字9大於7,便沒有必要往下比較了,再看右邊開始的第二列(8,9,10,11),我們發現這一列中的第乙個數字8也大於7,便沒有必要往下比較了,再看從右邊開始的第三列(2,4,7,8),我們發現這一列中的第乙個數字2小於7,所以2所在行的前面的數字沒必要比較了,這列的第二行數字4小於7,所以這行前面的數字沒必要比較了,這列第三行數字正好為7,停止比較,返回true
具體演算法:
#include using namespace std;
bool find(int* matrix, int rows, int columns, int number)
else if (matrix[row*columns + column] > number)
--column;
else
++row;
} }printf("compare times %d\n", cmptimes);
return found;
}//測試
void test(int* matrix, int rows, int columns, int number, bool exception)
//輸入矩陣和整數
void input()
,,, };
bool exception = true;
test((int*)matrix, 4, 4, 7, exception);
}int main()
執行結果:
從該演算法中可以看出,對於乙個n*n的矩陣來說,尋找乙個數字需要比較的次數,也就是迴圈的次數為n+n-1次
*1.在計算機記憶體中,陣列的存放順序為:先儲存第一行,再第二行……按行逐漸儲存在連續的記憶體中
*2.函式之間矩陣的傳遞使用指標。實參:test((int*)matrix,...),形參:void test(int* matrix,...)
陣列當引數傳遞問題:陣列當引數傳遞
資料結構與演算法(查詢)1
演算法如下 define listsze 20 typedef struct elemtype typedef struct stable 查詢過程 int searchseq stable st,keytype k 在順序表中查詢關鍵字等於k的元素,若找到則函式值為該元素在表中的位置,否則為0 a...
資料結構(三)查詢演算法(1)順序查詢
一片儲存空間的中的資料既可能是有序的 也可能是無序的,有序可以是公升序 降序 分塊公升序等等 對於無序存放的陣列只能通過順序查詢的方法找到想要的資料 順序查詢就是從資料空間的一端到另一端,逐個資料進行比對,直至找到想要的資料 按照這種說法,最終可能出現兩種情況 找到元素,找不到,超出邊界 這樣每次需...
資料結構 查詢1
一 基本定義 1.關鍵字 是資料元素中摸個資料項的值,又稱鍵值,他可以標識乙個資料元素 2.靜態查詢表 只作查詢操作的查詢表 3.動態查詢表 在查詢中插入或刪除元素 二 順序表查詢 線性查詢 1.過程 從表的第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值的比較,若某個記錄的關鍵字和給定值...