C 資料結構 1 陣列 查詢演算法

2021-08-21 17:26:26 字數 2211 閱讀 7096

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.過程 從表的第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值的比較,若某個記錄的關鍵字和給定值...