版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
哈希表設(shè)計(jì)一.問題描述問題描述:針對某個(gè)集體中人名設(shè)計(jì)一個(gè)哈希表,使得平均查找長度不超過R,并完成相應(yīng)的建表和查表程序?;疽螅杭僭O(shè)人名為中國人姓名的漢語拼音形式。待填入哈希表的人名共有30個(gè),取平均查找長度的上限為2。哈希函數(shù)用除留余數(shù)法構(gòu)造,用線性探測再散列法或鏈地址法處理沖突。二.需求分析(1)針對某個(gè)集體中的人名設(shè)計(jì)一個(gè)哈希表,使得平均查找長度不超過R,完成相應(yīng)的建立和查表程序。(2)人名為漢語拼音形式,最長不超過19個(gè)字符(如:莊雙雙zhuangshuangshuang)。(3)假設(shè)待填入哈希表的人名有30個(gè),平均查找長度的上限為2。哈希表用除留余數(shù)法構(gòu)造,用偽隨機(jī)探測在散列法處理沖突。(4)在輸入人名過程中能自動識別非法輸入,并給與非法輸入的反饋信息要求重新輸入。(5)查找成功時(shí),顯示姓名及關(guān)鍵字,并計(jì)算和輸出查找成功的平均查找長度三.概要設(shè)計(jì)1.為實(shí)現(xiàn)上述算法,需要順序的抽象數(shù)據(jù)類型。ADTHash{數(shù)據(jù)對象D:D是具有相同特征的數(shù)據(jù)元素的集合。各數(shù)據(jù)元素均含有類型相同,可唯一標(biāo)識的數(shù)據(jù)元素的關(guān)鍵字。數(shù)據(jù)關(guān)系:數(shù)據(jù)元素同屬于一個(gè)集合?;静僮鱌:Creat(&ST,n);操作結(jié)果:構(gòu)造一個(gè)含n個(gè)數(shù)據(jù)元素的靜態(tài)查找表ST。Destroy(&ST)初始條件:靜態(tài)查找表ST存在。操作結(jié)果:銷毀表ST.Search:(ST,key)初始條件:靜態(tài)查找表ST存在,key為和關(guān)鍵字類型相同的定值。操作結(jié)果:若ST中存在其關(guān)鍵字等于key的數(shù)據(jù)元素,則函數(shù)值為該數(shù)據(jù)元素的值或在表中的位置,否則為“空”。Insert(&h,key)初始條件:哈希表h存在。操作結(jié)果:若表中沒有key,則在h中插入key。Hash(h,&k)初始條件:哈希表h存在。操作結(jié)果:通過除留余數(shù)法得到地址用k返回。2.本程序有三個(gè)模塊:(1)主程序模塊Main(){初始化;{接受命令;顯示結(jié)果; }}(2)創(chuàng)建hash表的模塊(3)查找hash表的模塊(4)顯示哈希表的模塊四.詳細(xì)設(shè)計(jì)#include<stdio.h>#include<malloc.h>#include<string.h>//#include#defineHASH_LEN50//哈希表的長度#defineM47#defineNAME_NO30//人名的個(gè)數(shù)typedefstructNAME{char*py;//名字的拼音intk;//拼音所對應(yīng)的整數(shù)}NAME;NAMENameList[HASH_LEN];typedefstructhterm//哈希表{char*py;//名字的拼音intk;//拼音所對應(yīng)的整數(shù)intsi;//查找長度}HASH;HASHHashList[HASH_LEN];/*-----------------------姓名(結(jié)構(gòu)體數(shù)組)初始化---------------------------------*/voidInitNameList(){NameList[0].py="baojianbo";for(intr=0;r<20;r++)//求出姓名的拼音所對應(yīng)的整數(shù)(關(guān)鍵字)s0+=name[r];intsum=1;intadr=s0%M;//使用哈希函數(shù)intd=adr;if(HashList[adr].k==s0)//分3種情況進(jìn)行判斷printf("\n姓名:%s關(guān)鍵字:%d查找長度為:1",HashList[d].py,s0);elseif(HashList[adr].k==0)printf("無該記錄!");else{intg=0;do{d=(d+s0%10+1)%M;//偽散列sum=sum+1;if(HashList[d].k==0){printf("無記錄!");g=1;}if(HashList[d].k==s0){printf("\n姓名:%s關(guān)鍵字:%d查找長度為:%d",HashList[d].py,s0,sum);g=1;}}while(g==0);}}/*--------------------------------顯示哈希表----------------------------*/voidDisplay(){printf("\n\n地址\t關(guān)鍵字\t\t搜索長度\tH(key)\t\t拼音\n");//顯示的格式for(inti=0;i<15;i++){printf("%d",i);printf("\t%d",HashList[i].k);printf("\t\t%d",HashList[i].si);printf("\t\t%d",(HashList[i].k)%M);printf("\t%s",HashList[i].py);printf("\n");}//printf("按任意鍵繼續(xù)顯示...\n");//由于數(shù)據(jù)比較多,所以分屏顯示(以便在Win9x/DOS下能看到所有的數(shù)據(jù))//getch();for(i=15;i<30;i++){printf("%d",i);printf("\t%d",HashList[i].k);printf("\t\t%d",HashList[i].si);printf("\t\t%d",(HashList[i].k)%M);printf("\t%s",HashList[i].py);printf("\n");}//printf("按任意鍵繼續(xù)顯示...\n");//getch();for(i=30;i<40;i++){printf("%d",i);printf("\t%d",HashList[i].k);printf("\t\t%d",HashList[i].si);printf("\t\t%d",(HashList[i].k)%M);printf("\t%s",HashList[i].py);printf("\n");}//printf("按任意鍵繼續(xù)顯示...\n");//getch();for(i=40;i<50;i++){printf("%d",i);printf("\t%d",HashList[i].k);printf("\t\t%d",HashList[i].si);printf("\t\t%d",(HashList[i].k)%M);printf("\t%s",HashList[i].py);printf("\n");}floataverage=0;for(i=0;i<HASH_LEN;i++)average+=HashList[i].si;average/=NAME_NO;printf("\n\n平均查找長度:ASL(%d)=%f\n\n",NAME_NO,average);}/*--------------------------------主函數(shù)----------------------------*/voidmain(){/*::SetConsoleTitle("哈希表操作");//WindowsAPI函數(shù),設(shè)置控制臺窗口的標(biāo)題HANDLEhCon=::GetStdHandle(STD_OUTPUT_HANDLE);//獲得標(biāo)準(zhǔn)輸出設(shè)備的句柄::SetConsoleTextAttribute(hCon,10|0);//設(shè)置文本顏色*/printf("\n------------------------哈希表的建立和查找----------------------");InitNameList();CreateHashList();while(1){printf("\n\n");printf("1.顯示哈希表\n");printf("2.查找\n");printf("3.退出\n");err:charch1;scanf("%c",&ch1);if(ch1=='1')Display();elseif(ch1=='2')
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 輸煤系統(tǒng)生產(chǎn)工作聯(lián)系制度
- 數(shù)據(jù)挖掘算法簡明指南
- 超市配送員排班制度
- 血透室??坪艚嗅t(yī)生標(biāo)準(zhǔn)制度
- 2025年山東事業(yè)單位備考考試及答案
- 2025年臺州市人才發(fā)展集團(tuán)筆試及答案
- 2025年助理會計(jì)師筆試及答案
- 2025年用友財(cái)務(wù)信息化專員筆試及答案
- 2025年亳州市醫(yī)療事業(yè)單位考試及答案
- 2025年用戶研究筆試題目及答案
- 食品行業(yè)停水、停電、停汽時(shí)應(yīng)急預(yù)案
- 高一英語新教材全四冊單詞表漢譯英默寫(2019新人教版)
- MEMRS-ECG心電網(wǎng)絡(luò)系統(tǒng)使用說明書
- 美國變壓器市場深度報(bào)告
- 建設(shè)工程第三方質(zhì)量安全巡查標(biāo)準(zhǔn)
- 乳化液處理操作規(guī)程
- 飯店轉(zhuǎn)讓協(xié)議合同
- 營建的文明:中國傳統(tǒng)文化與傳統(tǒng)建筑(修訂版)
- 用流程復(fù)制培訓(xùn)課件
- 液化天然氣氣化站安全檢查表
- 2023年白銀有色集團(tuán)招聘筆試題庫及答案解析
評論
0/150
提交評論