C語言及程式設計高階例程 24 查詢問題及其求解

2021-09-23 17:31:21 字數 2816 閱讀 9883

賀老師教學鏈結

c語言及程式設計高階

本課講解

順序查詢

#include 

#define size 10

int main( )

; /*也可以通過鍵盤輸入等方式給出資料*/

int i;

int key; /*key表示待查詢資料*/

int index=-1; /*用index表示查詢結果——關鍵字key出現的位置*/

printf("input a key you want to search: ");

scanf("%d" , &key); /*輸入要查詢的關鍵字*/

for(i=0; iif(key == d[i]) /*在迴圈中逐個比較,如果key與某d[i]相等,表示找到了*/

if(index >= 0) /*index >= 0,迴圈一定是由break跳出的,代表找到了。這個條件也可以用iprintf("the index of the key is %d .\n", index);

else

/*沒有找到,index仍保持-1*/

printf("not found.\n");

return

0;}

二分查詢的實現

#include 

#define n 10

int main( )

;/*通過初始化給出元素值*/

int first, last, mid; /*查詢中記錄下標的3個變數*/

int key; /*待查工的關鍵字*/

int index=-1; /*記錄查詢到的元素的下標,初值-1表示沒有找到*/

printf("input a key you want to search: ");

scanf("%d" , &key); /*輸入待查詢的關鍵字*/

first=0, last=n-1; /*first和last分別是首元素和末元素的下標*/

while(first<=last) /*若first>last,也就意味著迴圈該結束了,找不到,不必找了*/

else

if(key/*下一輪將在前半段找,故last=mid-1*/

last=mid-1;

else

/*下一輪將在後半段找,故first=mid+1*/

first=mid+1;

}if(index >= 0) /*輸出結果*/

printf("the index of the key is %d .\n", index);

else

printf("not found.\n");

return

0;}

不用比較的查詢演算法

#include 

int search(int h, int key);

void store(int h, int data);

int main()

; int m, n;

int i;

for (i = 0; i < 6; i++)

scanf("%d", &m);

int result = search(data, m);

if (result)

printf("在陣列中找到.\n");

else

printf("沒有此資料!\n");

return0;}

int search(int d, int key)

void store(int d, int n)

用」除留餘數」雜湊函式定址,開放位址法解決衝突的雜湊方法

#include 

void inserthash(int h, int len, int key);

int searchhash(int h, int len, int key);

#define n 13 /*n取素數*/

int main()

; /*本例中陣列中要儲存的均為正數,初始化為全0表示值為空*/

int key; /*待查關鍵字*/

int i;

for (i = 0; i < 6; i++) /*先演示儲存資料*/

printf("input a key you want to search: ");

scanf("%d" , &key); /*輸入待查詢的關鍵字*/

int index = searchhash(data,n, key); /*在長度為n的陣列data中查詢關鍵字key*/

if(index >= 0) /*輸出結果*/

printf("the index of the key is %d .\n", index);

else

printf("not found.\n");

return0;}

/*將值為key的關鍵字存入長度為n的陣列data中*/

void inserthash(int h, int len, int key)

h[i] = key; /*儲存關鍵字key*/

}/*在長度為n的陣列data中查詢關鍵字key,返回值為儲存資料的位置,-1代表沒找到*/

int searchhash(int h, int len, int key)

if (h[i] == 0) /*找到的是空元素,說明沒有找到*/

i = -1; /*返回-1將代表沒有找到*/

return i; /*返回結果*/

}

C語言及程式設計高階例程 24 查詢問題及其求解

賀老師教學鏈結 c語言及程式設計高階 本課講解 順序查詢 include define size 10 int main 也可以通過鍵盤輸入等方式給出資料 int i int key key表示待查詢資料 int index 1 用index表示查詢結果 關鍵字key出現的位置 printf inp...

C語言及程式設計高階例程 19 鍊錶應用

賀老師教學鏈結 c語言及程式設計高階 本課講解 猴子選大王 include include struct monkey int main else p2 next head 最後乙隻再指向第一只,成了乙個圓圈 下面要開始數了 p1 head for i 1 inext 圍成圈的,可能再開始從第一隻數...

C語言及程式設計初步例程 24 if語句的巢狀

賀老師教學鏈結 c語言及程式設計初步 本課講解 應用 分段函式求解 好程式 include int main else if x 6 else if x 10 else printf f n y return 0 不好的程式 include int main if x 2 x 6 if x 6 x ...