




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、哈希表(散列表)的設計與實現【問題描述】 設計哈希表實現電話號碼查找系統。【基本要求】 (1) 設每個記錄有下列數據項:電話號碼、用戶名、地址; (2) 從鍵盤輸入各記錄,分別以電話號碼為關鍵字建立散列表; (3)采用拉鏈法解決沖突; (4)查找并顯示給定電話號碼的記錄; (5) 查找并顯示給定用戶名的記錄。【選做內容】 (1)系統功能的完善; (2)設計不同的散列函數,比較沖突率; (3)在散列函數確定的前提下,嘗試各種不同類型處理沖突的方法,考察平均查找長度的變化。地址嫌麻煩沒加,使用的時候要先新建一個空白的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)/字符串哈希值生成函數 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)/字符串哈希值生成函數 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)/統計hmax數組中有多少數據for(j=0;jp&hj.num!=null;j+)return j;void wdata()/新建電話簿數據文件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的數據寫入到文件當中int j=datanum(j);file *fp;fp=fopen(da
5、ta.txt,wb);fwrite(h,sizeof(struct data),j,fp);fclose(fp);void adata()/在電話簿中添加數據并寫入文件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()/讀取文件中的電話簿數據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數組當中file *fp;fp=fopen(data.txt,rb);fread(h,sizeof(struct data),p,fp);fclose(fp);void ddata(int n)/刪除電話簿中數據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)/按電話號碼在哈希表中查找數據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)/按姓名在哈希表中查找數據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*電話號碼查詢系統*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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省濱海縣聯考2025年高中畢業生第二次復習統一檢測試題生物試題含解析
- 山西省晉城市2024-2025學年初三下學期階段性測試(四)英語試題含答案
- 江蘇省江都國際校2024-2025學年初三考前模擬(一)生物試題含解析
- 合同代理與售后服務2025年
- 山東省濟南市商河縣2024-2025學年初三第一次(5月)聯考物理試題理試題含解析
- 智慧農業農業科技園區的未來方向
- 江蘇省南通市海安市十校聯考2024-2025學年初三下學期周練九生物試題含解析
- 住宅購房誠意金合同正式版
- 版個人住宅租賃合同
- 四川省瀘州市合江縣2024-2025學年七年級下學期期中考試地理試題(含答案)
- 新教科版五下科學1.5《當環境改變了》教學設計
- 鄭州工業應用技術學院單招《職測》參考試題庫(含答案)
- 提醒納米顆粒對環境的影響
- 血液科護士的造血干細胞移植護理
- HGE系列電梯安裝調試手冊(ELS05系統SW00004269,A.4 )
- 護理教學查房組織與實施
- 小學五年級家長會課件
- 機動車檢測站儀器設備日常維護和保養作業指導書
- 立式數控銑床工作臺(X軸)設計
- 萬千心理情緒障礙跨診斷治療的統一方案:治療師指南
- 藏毛竇護理業務查房課件
評論
0/150
提交評論