




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、學(xué) 號: 課 程 設(shè) 計(jì)題 目哈希表設(shè)計(jì)學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級姓 名指導(dǎo)教師年月日目 錄課程設(shè)計(jì)任務(wù)書21問題描述31.1問題描述31.2基本要求31.3測試數(shù)據(jù)32.實(shí)現(xiàn)分析33程序設(shè)計(jì)43.1存儲結(jié)構(gòu)設(shè)計(jì)43.2主要算法設(shè)計(jì)43.2.1程序主要函數(shù)原型及功能43.2.2各函數(shù)的實(shí)現(xiàn)53.2.3函數(shù)模塊93.2.4程序流程圖94.調(diào)試報(bào)告114.1調(diào)試中的問題114.2對設(shè)計(jì)和編碼的討論和分析115. 程序運(yùn)行結(jié)果116.經(jīng)驗(yàn)和體會136.1感受和體會136.2對算法改進(jìn)的想法157.哈希表和源程序157.1哈希表157.2源程序16本科生課程設(shè)計(jì)成績評定表21課
2、程設(shè)計(jì)任務(wù)書學(xué)生姓名: 專業(yè)班級: 班 指導(dǎo)教師: 工作單位: 計(jì)算機(jī)科學(xué)系 題 目: 哈希表設(shè)計(jì) 初始條件: 針對某個(gè)集體(比如你所在的班級)中的“人名”設(shè)計(jì)一個(gè)哈希表,使得平均查找長度不超過R,完成相應(yīng)的建表和查表程序。 假設(shè)人名為中國人姓名的漢語拼音形式。待填入哈希表的人名共有30個(gè),取平均查找長度的上限為2。哈希函數(shù)用除留余數(shù)法構(gòu)造,用偽隨機(jī)探測再散列發(fā)處理沖突。測試用例見題集p166。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)課程設(shè)計(jì)報(bào)告按學(xué)校規(guī)定格式用A4紙打?。〞鴮懀?yīng)包含如下內(nèi)容: 1、 問題描述簡述題目要解決的問題是什么。2、 設(shè)計(jì)
3、存儲結(jié)構(gòu)設(shè)計(jì)、主要算法設(shè)計(jì)(用類C語言或用框圖描述)、測試用例設(shè)計(jì);3、 調(diào)試報(bào)告調(diào)試過程中遇到的問題是如何解決的;對設(shè)計(jì)和編碼的討論和分析。4、 經(jīng)驗(yàn)和體會(包括對算法改進(jìn)的設(shè)想)5、 附源程序清單和運(yùn)行結(jié)果。源程序要加注釋。如果題目規(guī)定了測試數(shù)據(jù),則運(yùn)行結(jié)果要包含這些測試數(shù)據(jù)和運(yùn)行輸出,6、 設(shè)計(jì)報(bào)告、程序不得相互抄襲和拷貝;若有雷同,則所有雷同者成績均為0分。時(shí)間安排:1、第19周完成。2、7月1 日14:00到計(jì)算中心檢查程序、交課程設(shè)計(jì)報(bào)告、源程序(CD盤)。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日課程設(shè)計(jì)報(bào)告書1問題描述1.1問題描述針對某個(gè)集體(比如你所在
4、的班級)中的“人名”設(shè)計(jì)一個(gè)哈希表,使得平均查找長度不超過R,完成相應(yīng)的建表和查表程序。1.2基本要求假設(shè)人名為中國人姓名的漢語拼音形式。待填入哈希表的人名共有30個(gè),取平均查找長度的上限為2。哈希函數(shù)用除留余數(shù)法構(gòu)造,用偽隨機(jī)探測再散列發(fā)處理沖突。1.3測試數(shù)據(jù)取自己班級成員的名字作為測試數(shù)據(jù),建立一個(gè)相關(guān)哈希表,并計(jì)算平均查找長度,完成查詢。2.實(shí)現(xiàn)分析(1) 針對某個(gè)集體中的人名設(shè)計(jì)一個(gè)哈希表,使得平均查找長度不超過R,完成相應(yīng)的建立和查表程序。(2) 人名為漢語拼音形式,最長不超過19個(gè)字符(如:莊雙雙 zhuangshuangshuang)。(3) 假設(shè)待填入哈希表的人名有30個(gè),平
5、均查找長度的上限為2。哈希表用除留余數(shù)法構(gòu)造,用偽隨機(jī)探測在散列法處理沖突。(4) 如果隨機(jī)函數(shù)自行構(gòu)造,則應(yīng)首先調(diào)整好隨機(jī)函數(shù),使其分布均勻。字符的取碼方法可直接利用C語言中的toascii函數(shù),并可對過長人名先進(jìn)行折疊處理。(5) 查找成功時(shí),顯示姓名及關(guān)鍵字,并計(jì)算和輸出查找成功的平均查找長度。3程序設(shè)計(jì)3.1存儲結(jié)構(gòu)設(shè)計(jì)根據(jù)哈希函數(shù)可唯一確定一個(gè)記錄的地址,在理想情況下,記錄就可以按照這個(gè)存儲地址進(jìn)行存儲。因此哈希表的存儲結(jié)構(gòu)可以是鏈表和線性表,但一般情況下選擇線性表進(jìn)行存儲。本次課程設(shè)計(jì)用到的存儲結(jié)構(gòu)如下:typedef struct char *name; /名字的拼音 int k
6、; /名字拼音所對應(yīng)的關(guān)鍵字NAME; /結(jié)構(gòu)體NEMA,存放名字列表 typedef struct /哈希表 char * name; /名字的拼音 int k; /名字拼音所對應(yīng)的關(guān)鍵字 int si; /名字的查找長度HASH; /結(jié)構(gòu)體HASH,哈希表3.2主要算法設(shè)計(jì)3.2.1程序主要函數(shù)原型及功能1 首先定義兩個(gè)結(jié)構(gòu)體數(shù)組:NAME NameListHASH_LENGTH; /全局變量NAME,存儲原始姓名HASH HashListHASH_LENGTH; /全局變量HASH,存儲哈希表中的姓名2 主要函數(shù)原型及功能:void InitNameList()功能:主要完成初始化姓名列
7、表,并且將字符串的各個(gè)字符所對應(yīng)的ASCII碼相加,所得的整數(shù)作為哈希表的關(guān)鍵字。以便利用關(guān)鍵字和除留余數(shù)法得到每個(gè)姓名的哈希地址。void CreateHashList() 功能:構(gòu)建一個(gè)哈希表并進(jìn)行初始化;利用各個(gè)姓名的關(guān)鍵字得到哈希地址,將各個(gè)姓名按哈希地址進(jìn)行存儲,如果發(fā)生沖突,則利用偽隨機(jī)探測再序列解決沖突,最終將姓名全部存放在哈希表中。void FindList() 功能:對用戶輸入的姓名進(jìn)行查找;查找結(jié)果分兩種情況:(1)查找成功,則輸出姓名、關(guān)鍵字和查找長度;(2)查找失敗,則返回相應(yīng)的失敗信息。查找時(shí)關(guān)鍵字的求法和處理沖突的方法與函數(shù)InitNameList()、Create
8、HashList()中的相關(guān)算法一致。void ShowHash() 功能:完成度已經(jīng)建立好的哈希表進(jìn)行輸出顯示,并輸出平均查找長度。void main()功能:完成對個(gè)函數(shù)的調(diào)用和與用戶的交互。3.2.2各函數(shù)的實(shí)現(xiàn)(1) 初始化姓名列表: 哈希地址方法:將字符串的各個(gè)字符所對應(yīng)的ASCII碼相加,所得的整數(shù)做為哈希表的關(guān)鍵字key。 函數(shù)void InitNameList()的實(shí)現(xiàn)(以班級30人的人名作為初始值):void InitNameList() /姓名(結(jié)構(gòu)體數(shù)組)初始化 char *f; int r,s0,i; NameL=fanxu; NameList1.na
9、me=jiangyong; NameL=guyuze; NameL=liuzhenhai; NameL=chenang; NameL=caoyandong; NameL=yangchenchen; NameL=shenjin; NameL=puping; NameL=luhaibo; NameL=renchao; NameL=wangshichuang; NameL=guoqihui; Nam
10、eL=chengkang; NameL=wangyuesong; NameL=liangfangping; NameL=wangxufeng; NameL=hejie; NameL=yangyiming; NameL=wushengping; NameL=yangchaoqin; NameL=wulinfeng; NameL=xiehongwei; NameL=liushuo;
11、 NameL=yijiabin; NameL=xuhaiyang; NameL=yangwenjuan; NameL=chenjunyan; NameL=wangjiaxin; NameL=chenwan; for(i=0;iNAME_NO;i+) s0=0; f=NameL; for(r=0;*(f+r)!=0;r+)/* 哈希地址方法:將字符串的各個(gè)字符所對應(yīng)的ASCII碼相加,所得的整數(shù)作為哈希表的關(guān)鍵字*/ s0=*(f+r)+s0; NameLis
12、ti.k=s0; (2) 建立哈希表 用除留余數(shù)法構(gòu)建哈希函數(shù) 用偽隨機(jī)探測再散列法處理沖突 構(gòu)建哈希函數(shù)void CreateHashList()的實(shí)現(xiàn):void CreateHashList() int i; for(i=0; iHASH_LENGTH;i+) HashListi.py=; HashListi.k=0; HashListi.si=0; for(i=0;iHASH_LENGTH;i+) int sum=0; int adr=(NameListi.k)%M; /哈希函數(shù) int d=adr; if(HashListadr.si=0) /如果不沖突 HashListadr.k=N
13、ameListi.k; HashListadr.py=NameListi.py; HashListadr.si=1; else /沖突 do d=(d+NameListi.k%10+1)%M; /偽隨機(jī)探測再散列法處理沖突 sum=sum+1; /查找次數(shù)加1 while (HashListd.k!=0); HashListd.k=NameListi.k; HashListd.py=NameListi.py; HashListd.si=sum+1; (3) 查找哈希表 若查找成功,則輸出姓名、關(guān)鍵字和查找長度;查找失敗,則返回相應(yīng)的失敗信息。 查找函數(shù)void FindList()的實(shí)現(xiàn):vo
14、id FindList() /查找 char name20=0; int s0=0,r,sum=1,adr,d; printf(請輸入姓名的拼音:); scanf(%s,name); for(r=0;r20;r+) /求出姓名的拼音所對應(yīng)的整數(shù)(關(guān)鍵字) s0+=namer; adr=s0%M; /使用哈希函數(shù) d=adr; if(HashListadr.k=s0) /分3種情況進(jìn)行判斷 printf(n姓名:%s 關(guān)鍵字:%d 查找長度為: 1,HashListd.py,s0); else if (HashListadr.k=0) printf(無此記錄!); else int g=0; d
15、o d=(d+s0%10+1)%M; /偽隨機(jī)探測再散列法處理沖突 sum=sum+1; if(HashListd.k=0) printf(無此記錄! ); g=1; if(HashListd.k=s0) printf(n姓名:%s 關(guān)鍵字:%d 查找長度為:%d,HashListd.py,s0,sum); g=1; while(g=0); (4) 顯示哈希表 顯示哈希表的的格式: n地址t關(guān)鍵字tt搜索長度tH(key)t 姓名n 顯示哈希表的函數(shù)void Display()的:void Display() /顯示 int i; float average=0; printf(n地址t關(guān)鍵字
16、tt搜索長度tH(key)t 姓名n); /顯示的格式 for(i=0; i50; i+) printf(%d ,i); printf(t%d ,HashListi.k); printf(tt%d ,HashListi.si); printf(tt%d ,HashListi.k%M); printf(t %s ,HashListi.py); printf(n); for(i=0;i&ch1;switch(ch1)case D:Display(); coutendl;break;case F:FindList();coutendl;break;case Q:exit(0);cout&ch1;wh
17、ile(ch1!=n); 3.2.3函數(shù)模塊模塊調(diào)用關(guān)系主函數(shù)模塊輸出模塊查找模塊哈希表模塊姓名初始化模塊3.2.4 程序流程圖本次程序流程圖如下開始選擇操作S、F、Q顯示哈希表查找哈希表SFQ退出程序、繼續(xù)Y退出NYN結(jié)束4.調(diào)試報(bào)告4.1調(diào)試中的問題經(jīng)過對哈希表的研究后,即進(jìn)行程序的設(shè)計(jì)和編碼;將原程序編好后,經(jīng)過編譯,有如下幾個(gè)問題: 在聲明了結(jié)構(gòu)體NAME后,最開始結(jié)構(gòu)體內(nèi)的char name20用來存放姓名拼音,最長為20位;經(jīng)分析,name表示所存姓名拼音的首地址,無需再申明具體的數(shù)組長度來存放姓名拼音,這樣增加了系統(tǒng)的開銷,最后改成char*name,對存放姓名拼音時(shí)直接對nam
18、e賦值,系統(tǒng)直接按照字符數(shù)組來存放姓名拼音,而存放長度沒有固定。 建立哈希表的函數(shù):void CreateHashList()中,如果遇到?jīng)_突后,在dowhile();語句中,利用偽隨機(jī)探測再散列法處理沖突,沒執(zhí)行一次就要將記錄查找長度的sum增加一次,在這個(gè)循環(huán)執(zhí)行完后,即找到一個(gè)不沖突的地址來存放姓名拼音,經(jīng)過自習(xí)分析,此時(shí)的查找長度需要加1,即將原來的語句HashListd.si=sum; 改成HashListd.si=sum+1;此時(shí)的HashListd.si才是正確的查找長度。 main函數(shù)中的dowhile()語句中,最開始while()語句是:while(a!=N|a!=n) 經(jīng)
19、過分析,在用戶需要退出時(shí),不論輸入a=N還是a=n,都將繼續(xù)循環(huán);經(jīng)過自習(xí)思考,最終將while()語句改成:while(a=Y|a=y),這樣就實(shí)現(xiàn)了用戶的選擇。4.2對設(shè)計(jì)和編碼的討論和分析算法采用結(jié)構(gòu)體和數(shù)組來存儲數(shù)據(jù),利用除留余數(shù)法得到哈希地址,利用為隨機(jī)序列法來處理沖突,姓名拼音的關(guān)鍵字為字符串的各個(gè)字符所對應(yīng)的ASCII碼相加,所得的整數(shù)。求哈希地址時(shí)模為51,哈希表的總長度為50,而實(shí)際名字只有30個(gè),因此有20個(gè)地址空間被空閑著,這浪費(fèi)了一定的內(nèi)存。算法的時(shí)間復(fù)雜度為:O(n)。平均查找長度為:1.裝填因子為:30/50=0.65. 程序運(yùn)行結(jié)果經(jīng)過對程序錯(cuò)誤的修改后,程序執(zhí)行
20、,經(jīng)過分析,程序運(yùn)行結(jié)果正確,滿足題目要求!運(yùn)行結(jié)果主要截圖如下: 程序開始后,初始界面為: 選擇S后結(jié)果為:結(jié)果顯示,平均查找長度為1.,符合題設(shè)要求! 選擇Y繼續(xù)后選擇F查找查找成功結(jié)果為:查找失敗結(jié)果為:6.經(jīng)驗(yàn)和體會6.1感受和體會數(shù)據(jù)結(jié)構(gòu)這門課程是計(jì)算機(jī)專業(yè)一門基礎(chǔ)性學(xué)科,重要性可見一斑,學(xué)好這門課程對以后人生的發(fā)展具有深遠(yuǎn)的影響。而數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)便是對學(xué)習(xí)效果的檢驗(yàn)。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)不僅可以鍛煉我們獨(dú)立思考問題、解決問題的能力,而且可以培養(yǎng)我們的整體性思維的能力;通過課程設(shè)計(jì),使我了解了很多數(shù)據(jù)結(jié)構(gòu)的經(jīng)典問題和經(jīng)典算法,加深了對數(shù)據(jù)結(jié)構(gòu)的再認(rèn)識,鞏固了數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)性知識,比如
21、:存儲結(jié)構(gòu)、數(shù)據(jù)查找、哈希表的設(shè)計(jì)和查找、算法分析等。哈希表是根據(jù)關(guān)鍵碼值而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu),它把關(guān)鍵碼值通過哈希函數(shù)映射到表中一個(gè)地址來存儲記錄,以加快查找的速度。哈希函數(shù)的構(gòu)造方法有:直接尋址法、數(shù)字分析法、平方取中法、折疊法、隨機(jī)數(shù)法、除留余數(shù)法等;對于地址沖突要進(jìn)行解決,主要解決沖突的的方法有:開放尋址法(線性探測再散列、二次探測再散列、偽隨機(jī)探測再散列)、再散列法、鏈地址法、建立一個(gè)公共溢出區(qū)等。查找過程中,關(guān)鍵碼的比較次數(shù),取決于產(chǎn)生沖突的多少,產(chǎn)生的沖突少,查找效率就高,產(chǎn)生的沖突多,查找效率就低。因此,影響產(chǎn)生沖突多少的因素,也就是影響查找效率的因素。影響產(chǎn)生沖突多少有以
22、下三個(gè)因素:散列函數(shù)是否均勻、處理沖突的方法、散列表的裝填因子。通過查找相關(guān)資料還了解了著名的hash算法:MD4、MD5、SHA-1 及其他。哈希表的主要用途為:文件校驗(yàn)、數(shù)字簽名、鑒權(quán)協(xié)議等。這也是對于以后繼續(xù)研究數(shù)據(jù)結(jié)構(gòu)所必須了解的知識。這次課程設(shè)計(jì),我明白了對于編寫程序,解題的思路尤為重要。在編寫程序之前,如果沒有比較清晰的思路,根本不可能編出好的程序。就算馬馬虎虎的編出來,程序的邏輯性、健壯性、完善性、合理性也不會很強(qiáng)。在編程之前,我們應(yīng)反復(fù)研究題目要求,對題目涉及的情況進(jìn)行比較充分的分析,以便編寫出更加符合題意的程序;其次要充分考慮各種臨界情況,對一些錯(cuò)誤的輸入進(jìn)行處理。因此在我們
23、編程序之前一定要做好充分的準(zhǔn)備,首先要理清自己的思路,然后再將思路分劃成幾個(gè)模塊,逐塊的寫好算法,最后再將所有的模塊有機(jī)的聯(lián)系起來,組成一個(gè)完整的程序。在成功通過編譯的情況下,對程序運(yùn)行的結(jié)果進(jìn)行系統(tǒng)的分析,檢驗(yàn)其正確性,如果有錯(cuò)誤,應(yīng)立即去分析源程序的邏輯錯(cuò)誤,直到得到正確的結(jié)果。在這次課程設(shè)計(jì)的過程中,我也遇到了很多難題。在種種的困難中,我明白了在編寫程序時(shí)要有耐心。如果你沒有耐心,即使再好的算法思路也不會得到很好的表達(dá),特別是在調(diào)試的過程中,對于各種各樣的錯(cuò)誤,要特別的有耐心去自習(xí)分析原因,特別是一些基本的語法錯(cuò)誤,不能一看到錯(cuò)誤很多就亂了陣腳,更不能輕易的放棄,半途而廢。比如在調(diào)試中沒
24、有定義某些變量的錯(cuò)誤、基本的輸入輸出錯(cuò)誤、數(shù)據(jù)選取不合理的錯(cuò)誤、變量名前后不一的錯(cuò)誤、函數(shù)返回值的錯(cuò)誤等等。其實(shí)只要有耐心,你就會發(fā)現(xiàn),在你修改了一個(gè)錯(cuò)誤之后,其它有的錯(cuò)誤也會跟著消失,所以在編譯的時(shí)候一定要有耐心。數(shù)據(jù)結(jié)構(gòu)是一門比較難的課程,需要花很多的時(shí)間去不斷地練習(xí)和實(shí)踐。要想把這門課程學(xué)好學(xué)精并非一件容易的事,特別是一些經(jīng)典算法,是幾十年前人智慧的結(jié)晶,對于初學(xué)者的理解和應(yīng)用有一定的難度;但是事在人為,只要肯下功夫,便一定可以學(xué)好??偟膩碚f,這次程序設(shè)計(jì)讓我獲益匪淺,相信在以后的學(xué)習(xí)生活中我也能從中獲得啟發(fā)。6.2對算法改進(jìn)的想法本次哈希表的設(shè)計(jì)采用的存儲結(jié)構(gòu)為順序存儲,這樣的存儲結(jié)構(gòu)
25、簡單易操作,但是必須實(shí)現(xiàn)給定存儲大小,這樣不利于動(dòng)態(tài)操作,在題目允許的情況下,可以采用鏈?zhǔn)酱鎯Y(jié)構(gòu),從而實(shí)現(xiàn)動(dòng)態(tài)存儲;對關(guān)鍵字的選取還可以按照各個(gè)姓名的字母表的順序等方式,哈希地址的除留余數(shù)法的模還可以是其他的接近表長的素?cái)?shù),解決沖突的偽隨機(jī)序列取余的模長也可以是其他的接近表長的素?cái)?shù);本次哈希表的總長度為50,而實(shí)際只用到了30個(gè),還余下20個(gè)空閑地址被白白浪費(fèi)了,可以在滿足題目要求的情況下適當(dāng)?shù)倪x取小一點(diǎn)的總表長。7.哈希表和源程序7.1哈希表經(jīng)過分析,最后得到的哈希表如下:搜索長度地址存儲內(nèi)容關(guān)鍵字H(key)10(null)0011wangjiaxin1072112liuzhenhai1
26、073243(null)0014chenjunyan1075415xuhaiyang974516wangshichuang1383617hejie517718guoqihui87580900110chenang72410111wangxufeng108211212wulinfeng9756113yangyiming1084130140001500116chengkang9341601700118guyuze6811801900220liushuo7771202100122renchao7362202300424yangwenjuan11911802500126luhaibo74026227ch
27、enwan74026328xiehongwei107980290003000131yijiabin847310320003300134wangyuesong120734135yangchenchen125935136fanxu54636137shenjin7513703800139caoyandong1059390400004100042000430004400245liangfangping136539346wushengping119926147puping65947148jiangyong96648249yangchaoqin1170487.2源程序整個(gè)程序的源代碼為:#include#
28、include#include#define HASH_LENGTH 50 /哈希表的長度 #define M 51 /隨機(jī)數(shù)#define NAME_NO 30 /人名的個(gè)數(shù) typedef struct char *name; /名字的拼音首地址 int k; /拼音所對應(yīng)的關(guān)鍵字NAME;/結(jié)構(gòu)體NEMA,存放名字列表NAME NameListHASH_LENGTH; /全局變量NAME typedef struct /哈希表 char *name; /名字的拼音首地址 int k; /拼音所對應(yīng)的關(guān)鍵字 int si; /查找長度HASH;/結(jié)構(gòu)體HASH,哈希表HASH HashLi
29、stHASH_LENGTH; /全局變量HASH void InitNameList() /姓名(結(jié)構(gòu)體數(shù)組)初始化 char *f; int r,s0,i; NameL=fanxu; NameL=jiangyong; NameL=guyuze; NameL=liuzhenhai; NameL=chenang; NameL=caoyandong; NameL=yangchenchen; NameL=shenjin; NameL=pup
30、ing; NameL=luhaibo; NameL=renchao; NameL=wangshichuang; NameL=guoqihui; NameL=chengkang; NameL=wangyuesong; NameL=liangfangping; NameL=wangxufeng; NameL=hejie; NameL=yangyiming; NameL=wusheng
31、ping; NameL=yangchaoqin; NameL=wulinfeng; NameL=xiehongwei; NameL=liushuo; NameL=yijiabin; NameL=xuhaiyang; NameL=yangwenjuan; NameL=chenjunyan; NameL=wangjiaxin; NameL=chenwan; for(i=0;iNAME_NO;i+) s
32、0=0; f=NameL; for(r=0;*(f+r)!=0;r+)/* 哈希地址方法:將字符串的各個(gè)字符所對應(yīng)的ASCII碼相加,所得的整數(shù)做為哈希表的關(guān)鍵字*/ s0=*(f+r)+s0; NameListi.k=s0; void CreateHashList() /建立哈希表 int i; for(i=0; iHASH_LENGTH;i+) /哈希表的初始化 HashL=; HashListi.k=0; HashListi.si=0; for(i=0;iHASH_LENGTH;i+) int sum=0; int adr=(NameListi.k)%
33、M; /哈希函數(shù) int d=adr; if(HashListadr.si=0) /如果不沖突,則存儲到哈希表中 HashListadr.k=NameListi.k; HashL=NameL; HashListadr.si=1; else /如果沖突 do d=(d+NameListi.k%10+1)%M; /偽隨機(jī)探測再散列法處理沖突 sum=sum+1; /查找次數(shù)加1 while (HashListd.k!=0); HashListd.k=NameListi.k; HashL=NameL; HashListd.si=sum+1; void FindList() /查找 char name20=0; int s0=0,r,sum=1,adr,d; printf(請輸入姓名的拼音
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 主管在行業(yè)整合中的挑戰(zhàn)與應(yīng)對計(jì)劃
- 急診醫(yī)療文書標(biāo)準(zhǔn)化探討計(jì)劃
- 數(shù)據(jù)分析與決策支持總結(jié)計(jì)劃
- 提升員工歸屬感的實(shí)施策略計(jì)劃
- 美術(shù)班級文化建設(shè)活動(dòng)計(jì)劃
- 《貴州廣鋁水落潭礦業(yè)有限公司貴州省清鎮(zhèn)市貓場鋁土礦區(qū)水落潭礦段(新建)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評審意見
- 《伊吾縣九方建筑材料有限公司新疆伊吾縣尤樂滾碎石礦礦產(chǎn)資源開發(fā)利用與生態(tài)保護(hù)修復(fù)方案》專家意見認(rèn)定
- 血液凈化??谱o(hù)理核心
- 2025年克拉瑪依貨運(yùn)從業(yè)資格證考試模擬
- 2025年曲靖貨車上崗證理論模擬考試題庫
- 2024年社區(qū)工作者考試必背1000題題庫必背(必刷)
- 《短視頻拍攝與制作》課件-4.短視頻后期制作- 剪輯技巧
- 中考英語不規(guī)則動(dòng)詞變化表
- (2024年)中華人民共和國環(huán)境保護(hù)法全
- 事業(yè)單位工作人員調(diào)動(dòng)申報(bào)表
- 小學(xué)科學(xué)教師培訓(xùn)講座
- 電子陶瓷材料與器件制備
- 老年患者出院準(zhǔn)備服務(wù)專家共識
- 巖腳煤礦智能化綜采工作面匯報(bào)材料2020.11.10.11.10
- 四川省廣安市2021年中考地理真題(含答案)
- 大貨車安全駕駛技巧
評論
0/150
提交評論