




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、哈希表(散列表)的設計與實現(xiàn)【問題描述】 設計哈希表實現(xiàn)電話號碼查找系統(tǒng)?!净疽蟆?(1) 設每個記錄有下列數(shù)據(jù)項:電話號碼、用戶名、地址; (2) 從鍵盤輸入各記錄,分別以電話號碼為關鍵字建立散列表; (3)采用拉鏈法解決沖突; (4)查找并顯示給定電話號碼的記錄; (5) 查找并顯示給定用戶名的記錄?!具x做內(nèi)容】 (1)系統(tǒng)功能的完善; (2)設計不同的散列函數(shù),比較沖突率; (3)在散列函數(shù)確定的前提下,嘗試各種不同類型處理沖突的方法,考察平均查找長度的變化。地址嫌麻煩沒加,使用的時候要先新建一個空白的data.txt文件。/ hash.cpp : 定義控制臺應用程序的入口點。/#i
2、nclude stdafx.h#include#includeusing namespace std;#define p 100#define z 97#define max 100struct datachar name15;/存放姓名long num;/存放電話號碼;typedef struct hashdatachar name15;long num;hashdata *next;*linklist;data hmax;hashdata nhashmax;hashdata nahashmax;unsigned int bkdrhash(char *str)/字符串哈希值生成函數(shù) unsi
3、gned int seed = 31; / 31 131 1313 13131 131313 etc. unsigned int hash = 0; while (*str) hash = hash * seed + (*str+); return (hash & 0x7fffffff);unsigned int aphash(char *str)/字符串哈希值生成函數(shù) unsigned int hash = 0; int i; for (i=0; *str; i+) if (i & 1) = 0) hash = (hash 3); else hash = (hash 5); return (
4、hash & 0x7fffffff);int datanum(int j)/統(tǒng)計hmax數(shù)組中有多少數(shù)據(jù)for(j=0;jp&hj.num!=null;j+)return j;void wdata()/新建電話簿數(shù)據(jù)文件for(int i=0;i1;i+)scanf(%s%d,&,&hi.num);file *fp;fp=fopen(data.txt,wb);fwrite(h,sizeof(struct data),1,fp);fclose(fp);void wpdata()/將hmax的數(shù)據(jù)寫入到文件當中int j=datanum(j);file *fp;fp=fopen(da
5、ta.txt,wb);fwrite(h,sizeof(struct data),j,fp);fclose(fp);void adata()/在電話簿中添加數(shù)據(jù)并寫入文件for(int i=0;i1;i+)scanf(%s%d,&,&hi.num);file *fp;fp=fopen(data.txt,ab);fwrite(h,sizeof(struct data),1,fp);fclose(fp);void rdata()/讀取文件中的電話簿數(shù)據(jù)file *fp;fp=fopen(data.txt,rb);fread(h,sizeof(struct data),p,fp);int
6、 j=datanum(j);printf(n編號 姓 名 電 話nn);for(int i=0;ij;i+)printf(%4d ,i+1);printf(%10s %10dn,,hi.num);fclose(fp);void ldata()/載入文件到hmax數(shù)組當中file *fp;fp=fopen(data.txt,rb);fread(h,sizeof(struct data),p,fp);fclose(fp);void ddata(int n)/刪除電話簿中數(shù)據(jù)if(n=0)return;ldata();int j=datanum(j),i;for(i=n;ij;i+)s
7、trcpy(,);hi-1.num=hi.num;hj-1.num=null;wpdata();void numhash(struct data smax)/按電話號碼生成哈希表int k=0;int j=datanum(j);for(int i=0;iname,);p-num=si.num;p-next=nhashk.next;nhashk.next=p;void fnumhash(long n)/按電話號碼在哈希表中查找數(shù)據(jù)int k=0;k=n%z;linklist p;p=&nhashk;if(p-num=n) printf(n姓 名 電
8、話n);printf(%6s %10dnn,p-name,p-num);elsewhile(p!=null)if(p-num=n)printf(n姓 名 電 話n);printf(%6s %10dnn,p-name,p-num);break;elseif(p-next=null)printf(n該號碼不存在!nn);p=p-next;void namehash(data smax)/按姓名生成哈希表int k=0;int j=datanum(j);for(int i=0;iname,);p-num=si.num;p-next=nahashk.next;nahashk.next=p
9、;void fnamehash(char str3)/按姓名在哈希表中查找數(shù)據(jù)int k=0;k=bkdrhash(str);k=k%z;linklist p;p=&nahashk;if(aphash(str)=aphash() printf(n姓 名 電 話n);printf(%6s %10dnn,p-name,p-num);elsewhile(p!=null)if(aphash(str)=aphash(p-name)printf(n姓 名 電 話n);printf(%6s %10dnn,p-name,p-num);break;elseif(p-next=null)p
10、rintf(n該姓名不存在!nn);p=p-next;void rnumhash()/輸出按電話號碼生成的哈希表printf(n編號 姓 名 電 話nn);for(int i=0;inext;while(p!=null)printf( -%10s %10d,p-name,p-num);p=p-next;printf(n);elseprintf(%4d,i);printf(%10s %10dn,,nhashi.num);elseprintf(%4d,i);printf(n);void rnamehash()/生成按姓名生成的哈希表printf(n編號 姓 名 電 話nn);
11、for(int i=0;inext;while(p!=null)printf( -%10s %10d,p-name,p-num);p=p-next;printf(n);elseprintf(%4d,i);printf(%10s %10dn,,nahashi.num);elseprintf(%4d,i);printf(n);int _tmain(int argc, _tchar* argv)int m;ldata();numhash(h);namehash(h);cout*電話號碼查詢系統(tǒng)*endlendl;printf(tttt1.電 話 簿ntttt2.按電話查找nt
12、ttt3.按姓名查找ntttt4.顯示哈希表ntttt0.退 出nn);cout*endl;while(scanf(%d,&m)&m!=0)switch(m)case 1:int n;printf(n1.新 建n2.添 加n3.顯 示n4.刪 除n0.退 出n);while(scanf(%d,&n)&n!=0)switch(n)case 1: printf(n姓 名 電 話n);wdata();break;case 2: printf(n姓 名 電 話n);adata();break;case 3:rdata();break;case 4:int n;rdata();printf(n請輸入編號
13、(0.退出刪除):);scanf(%d,&n);ddata(n);break;printf(n1.新 建n2.添 加n3.顯 示n4.刪 除n0.退 出n);break;case 2:int num;/rnumhash();/ldata();/numhash(h);printf(請輸入一個電話號碼:);scanf(%d,&num);fnumhash(num);break;case 3:char name3;/rnamehash();/ldata();/namehash(h);printf(請輸入一個姓名:);scanf(%s,name);fnamehash(name);break;case 4:int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書和立項書區(qū)別
- 蒙醫(yī)課題申報書
- 小課題研究申報書
- 上虞勞動合同范本
- 血脂管理課題申報書范文
- 南京房子合同范本
- 供暖商務合同范本
- 課題研究申報書范例圖表
- 朗讀課題立項申報書
- pos機銷售合同范本
- 醫(yī)院診斷證明書word模板
- 硝酸鎂法制取濃硝酸
- PFMEA-失效模式分析案例
- 2023年高考語文全國甲卷作文深度解析及范文 課件31張
- 國家藥監(jiān)局醫(yī)療器械技術審評檢查大灣區(qū)分中心第二批員額制人員公開招聘(2023年)模擬預測(共1000題)筆試備考題庫及答案解析
- Unit+6+Lesson+3+The+Superhero+Behind+Superman+課件高中英語北師大版(2019)必修第二冊+
- 地面貼磚工藝施工規(guī)范及驗收標準
- 血液凈化標準操作規(guī)程(SOP)血液灌流操作
- Unit 1 Whats the matter 單元測試題及答案(含聽力MP3)
- 2023年棗莊科技職業(yè)學院單招綜合素質模擬試題及答案解析
- 化工企業(yè)安全生產(chǎn)教育培訓計劃及內(nèi)容
評論
0/150
提交評論