今日份分享:使用C語言實現(xiàn)靜態(tài)查找表中的順序查找和折半查找,并分析時間長短
Search.h文件
#define OK 1#define ERROR -1#include <stdio.h>#include<stdlib.h>#include<time.h>#define MAXSIZE 100typedef int KeyType;typedef int ElemType;typedef struct{ElemType data[10];KeyType key;}Node;typedef struct{Node elem[MAXSIZE];int length;}SSTable;int CreateTable(SSTable &ST,int n);void OutputTable(SSTable ST);int Search_Seq(SSTable ST,KeyType key);int Search_Bin(SSTable ST,KeyType key);主要函數(shù):
① 順序表的創(chuàng)建int CreateTable(SSTable &ST,int n){int i;ST.length=n;for(i=1;i<=n;i++){printf("輸入關(guān)鍵字:");scanf("%d",&ST.elem[i].key);printf("輸入值:");scanf("%s",&ST.elem[i].data);}return OK;}②順序表的輸出void OutputTable(SSTable ST){int i;printf("關(guān)鍵字: ");for(i=1;i<=ST.length;i++)printf("%6d",ST.elem[i].key);printf("\n值 : ");for(i=1;i<=ST.length;i++)printf(" %s ",ST.elem[i].data);}③順序查找int Search_Seq(SSTable ST,KeyType key){ST.elem[0].key=key;int i=ST.length;while(ST.elem[i].key!=key)i--;return i;}④折半查找int Search_Bin(SSTable ST,KeyType key){int low=1,high=ST.length;while(low<=high){int mid=(low+high)/2;if(key==ST.elem[mid].key)return mid;else if(key<ST.elem[mid].key)high=mid-1;else low=mid+1;}return 0;}Main函數(shù)Main函數(shù)中增加了時間函數(shù)用來測試查找時間的大小,當(dāng)然,在試驗中,無法輸入大量數(shù)據(jù),故兩者查找時間相差不大。
int main(int argc, char* argv[]){clock_t start,finish;printf("輸入構(gòu)造的順序表的長度:");SSTable ST;int n;scanf("%d",&n);CreateTable(ST,n);printf("檢查順序表\n");OutputTable(ST);printf("\n--------------順序查找--------------------\n");printf("輸入要查找的值的序號:");int key;scanf("%d",&key);int t;start=clock();t=Search_Seq(ST,key);finish=clock();if(t==0)printf("查找失敗,無匹配\n");else{printf("關(guān)鍵字為%d的數(shù)據(jù)是%s。\n",t,ST.elem[Search_Seq(ST,key)].data);printf("查找時間為: %lf\n",(double)(finish-start));}printf("\n--------------折半查找--------------------\n");printf("輸入要查找的值的序號:");scanf("%d",&key);start=clock();t=Search_Bin(ST,key);finish=clock();if(t==0)printf("查找失敗,無匹配\n");else{printf("關(guān)鍵字為%d的數(shù)據(jù)是%s。\n",t,ST.elem[Search_Bin(ST,key)].data);printf("查找時間為: %lf\n",(double)(finish-start));}return 0;}數(shù)據(jù):
查找:
注意:
1. Main函數(shù)中增加了時間函數(shù)用來測試查找時間的大小,當(dāng)然,在試驗中,無法輸入大量數(shù)據(jù),故兩者查找時間相差不大。
2.定義結(jié)構(gòu)體的時候要注意
每個數(shù)據(jù)有兩個元素,一個是關(guān)鍵字,一個是保存數(shù)據(jù)
typedef struct{ElemType data[10];KeyType key;}Node;typedef struct{Node elem[MAXSIZE];int length;}SSTable;希望對大家有幫助,有什么C/C++學(xué)習(xí)上的問題也可以來和我交流!
寫在最后:對于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
編程學(xué)習(xí)書籍分享:
編程學(xué)習(xí)視頻分享:
整理分享(多年學(xué)習(xí)的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
對于C/C++感興趣可以關(guān)注小編在后臺私信我:【編程交流】一起來學(xué)習(xí)哦!可以領(lǐng)取一些C/C++的項目學(xué)習(xí)視頻資料哦!已經(jīng)設(shè)置好了關(guān)鍵詞自動回復(fù),自動領(lǐng)取就好了!
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長刪除。
轉(zhuǎn)載請注明出處http://macbookprostickers.com/xintu/57641.html