本篇文章為大家展示了C語言中怎么利用哈希表實現(xiàn)通訊錄,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司專注骨干網(wǎng)絡(luò)服務(wù)器租用十年,服務(wù)更有保障!服務(wù)器租用,遂寧托管服務(wù)器 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。1.需求分析
本演示程序用C語言編寫,完成哈希表的生成,電話號碼的插入、以及查找等功能。
(1)按提示輸入相應(yīng)的聯(lián)系人的相關(guān)資料;
(2)以相應(yīng)的輸出形式輸出所存儲的的聯(lián)系人的資料;
(3)程序可以達(dá)到建立、添加、查找、打印的功能;
(4)程序可以判斷用戶輸入的非法數(shù)據(jù)并引導(dǎo)正確的輸入。
2.概要設(shè)計
存儲電話號碼的記錄時,若在存儲位置和其關(guān)鍵字之間建立某種確定的對應(yīng)關(guān)系使得每個關(guān)鍵字和存儲結(jié)構(gòu)中一個唯一的存儲位置相對應(yīng),那么在進(jìn)行查找時,根據(jù)這個對應(yīng)關(guān)系f就可以找到給定值K的像f(K)。若存儲結(jié)構(gòu)中存在關(guān)接找到所查記錄。這個對應(yīng)關(guān)系f稱為哈希(Hash)函數(shù)或散列函數(shù)。按照以上思路建立的表稱為哈希表或散列表。本案例設(shè)計主要考察散列表的建立、查找和修改。。
3.詳細(xì)設(shè)計
#include#include #include typedef struct node { char num[11],name[15],address[20],city[15],etp[20]; struct node *next; }NUM; struct NUM *num_list[19]; int hash(char num[]) { int i,k=0; for(i=0;num[i]!='\0';i++) { k=10*k+num[i]-48; //字符轉(zhuǎn)化為數(shù)字 } k=(k%19); //除余法求散列地址 return k; }//c除留余數(shù)法處理電話號碼 void create() { struct node *p1; int k1,m=0; while(m==0) { printf("請輸入你想添加人的信息:num name address city etp,\n"); p1=(struct node *)malloc(sizeof(struct node)); scanf("%s",p1->num); scanf("%s",p1->name); scanf("%s",p1->address); scanf("%s",p1->city); scanf("%s",p1->etp); k1=hash(p1->num);//用num數(shù)組值作為參數(shù)傳遞給哈希函數(shù)得到k1 p1->next=num_list[k1];//將k1得到的值作為數(shù)組的儲存地址賦值給頭結(jié)點的下一個節(jié)點 num_list[k1]=p1;//再將p1的數(shù)據(jù)傳遞給數(shù)組,故p1可以釋放作為下一個節(jié)點產(chǎn)生 printf("結(jié)束請按1,再次輸入請按0\n"); scanf("%d",&m); } printf("通訊表已經(jīng)創(chuàng)建\n"); } void dlter() { char num[11]; int k1; int find=0; struct node *f; printf("請查詢要修改的聯(lián)系人的電話:\n:"); scanf("%s",num); k1=hash(num); f=num_list[k1]; while(f!=NULL) { if(strcmp(f->num,num)==0) { printf("查找到了!請輸入要修改的人的資料:\n"); scanf("%s%s%s",f->num,f->name,f->address,f->city,f->etp); find=1; } f=f->next; } if(find=0) printf("沒有找到要刪除的節(jié)點!"); } void list() { struct node *f;//打印節(jié)點指針 int i; printf("打印通訊錄如下:\n"); for(i=0;i<19;i++) { f=num_list[i]; while(f!=NULL) { printf("--->num:%s\t name:%s\t address:%s\t city:%s\t etp:%s\t \n",f->num,f->name,f->address,f->city,f->etp); f=f->next; } } } void add() { char num[11],name[15],address[20],city[15],etp[20]; struct node *p1; int k1; printf("請輸入新添加的人的信息:電話 姓名 地址 城市 郵箱\n"); p1=(struct node *)malloc(sizeof(struct node)); scanf("%s%s%s",num,name,address); strcpy(p1->num,num); strcpy(p1->name,name); strcpy(p1->address,address); strcpy(p1->city,city); strcpy(p1->etp,etp); k1=hash(p1->num); p1->next=num_list[k1]; num_list[k1]=p1; printf("ok\n"); } void search() { char num[11]; int k1; int find=0; struct node *f; printf("請輸入查詢?nèi)说碾娫捥柎a:"); scanf("%s",num); k1=hash(num); f=num_list[k1]; while(f!=NULL) { if(strcmp(f->num,num)==0) { printf("所要查找的聯(lián)系人信息 :num:%s name:%s address:%s city:%s etp:%s\n",f->num,f->name,f->address,f->city,f->etp); find=1; } f=f->next; } if(find=0) printf("此聯(lián)系人沒有找到!"); } void main() { int i; char x; for(i=0;i<19;i++) { num_list[i]=NULL; } while(1) { // system("cls"); printf("\n"); printf("★★★★★★★★★通訊錄★★★★★★★★★\n"); printf("★◆----------------------------------◆★\n"); printf("★| 1.建立 ?。颸n"); printf("★| ?。颸n"); printf("★| 2.查找 ?。颸n"); printf("★| |★\n"); printf("★| 3.添加 ?。颸n"); printf("★| |★\n"); printf("★| 4.修改 ?。颸n"); printf("★| |★\n"); printf("★| 5.打印 ?。颸n"); printf("★| ?。颸n"); printf("★| 6.結(jié)束 ?。颸n"); printf("★◆----------------------------------◆★\n"); printf("★★★★★★★★★★★★★★★★★★★★★\n"); // x=getchar(); scanf("%s",&x); switch(x) { case '1': create();break; case '2': search();break; case '3': add();break; case '4': dlter();break; case '5': list();break; case '6': return; default:printf("請重新輸入;\n"); } } }
上述內(nèi)容就是C語言中怎么利用哈希表實現(xiàn)通訊錄,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。