版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> ****課程設(shè)計報告</p><p> 題目: 散列表的設(shè)計與實現(xiàn) </p><p> 2012年 6 月 1日</p><p><b> 目錄</b></p><p> 1. 需求分析說明……………………………………1</p><p> 2. 總體設(shè)計……
2、……………………………………1</p><p> 3. 詳細設(shè)計…………………………………………3</p><p> 4. 實現(xiàn)部分…………………………………………3</p><p> 5. 程序測試…………………………………………9</p><p> 6. 總結(jié)………………………………………………13</p><
3、p> 1.需求分析說明:【問題描述】設(shè)計散列表實現(xiàn)電話號碼查找系統(tǒng)?!净疽蟆?) 設(shè)每個記錄有下列數(shù)據(jù)項:電話號碼、用戶名、地址;2) 從鍵盤輸入各記錄,分別以電話號碼和用戶名為關(guān)鍵字建立散列表;3) 采用一定的方法解決沖突;4) 查找并顯示給定電話號碼的記錄;5) 查找并顯示給定用戶名的記錄。【進一步完成內(nèi)容】1) 系統(tǒng)功能的完善;2)
4、0;設(shè)計不同的散列函數(shù),比較沖突率;3) 在散列函數(shù)確定的前提下,嘗試各種不同類型處理沖突的方法,考察平均查找長度的變化。</p><p><b> 2.總體設(shè)計:</b></p><p> 就總體上來說,用散列表來實現(xiàn)電話號碼查找必須先輸入一些電話號碼作為數(shù)據(jù)庫,然后可以通過姓名或者號碼來查找,每個輸入的數(shù)據(jù)必須包括姓名,地址及號碼。具體的步驟如下圖
5、所示</p><p> 3.詳細設(shè)計:從需要給指定的函數(shù)需求創(chuàng)建類,到主函數(shù)及界面的功能實現(xiàn),都必須根據(jù)需求分析來做。</p><p> 先給所需要用到的頭文件定義以及散列函數(shù)用到的關(guān)鍵數(shù)key,進而定義輸入時的姓名,地址,號碼和節(jié)點的指針定義,接著定義兩個Hash函數(shù),是姓名和號碼所要用到的散列排序的函數(shù),其中包括處理地址沖突的關(guān)鍵式子key=key%20.緊接著定義個input函數(shù)
6、,為輸入節(jié)點創(chuàng)建空間,和下面定義的apend函數(shù)對應(yīng),apend函數(shù)是為接下來的節(jié)點創(chuàng)建空間??梢詣?chuàng)建兩個create函數(shù),為后面主函數(shù)的清空功能所用,create1用于清空姓名,create2用于清空號碼和地址。在創(chuàng)建兩個list函數(shù),list1用于列出根據(jù)姓名散列的出的結(jié)果,list2用于根據(jù)號碼散列的出的結(jié)果。進而創(chuàng)建兩個find函數(shù),fand1函數(shù)用于根據(jù)姓名查找,find2用于根據(jù)號碼查找。最后定義一個save函數(shù),用于保存數(shù)
7、據(jù),和一個menu函數(shù),用于界面的選擇。</p><p><b> 4.實現(xiàn)部分:</b></p><p> #include "iostream.h"</p><p> #include "string.h" </p><p> #
8、include "fstream.h"</p><p> #define NULL 0</p><p> unsigned int key;</p><p> unsigned int key2;</p><p><b> int *p;</b></p><p> s
9、truct node </p><p> char name[8],address[20];</p><p> char num[11];</p><p> node * next;</p><p><b> };</b></p><p&
10、gt; typedef node* pnode;</p><p> typedef node* mingzi;</p><p> node **phone;</p><p> node **nam;</p><p><b> node *a;</b></p><p> void has
11、h(char num[11]) </p><p><b> {</b></p><p> int i = 3;</p><p> key=(int)num[2];</p><p> while(num[i]!=NULL)</p><p><b> {
12、</b></p><p> key+=(int)num[i];</p><p><b> i++;</b></p><p><b> }</b></p><p> key=key%20;</p><p><b> }</b><
13、/p><p> void hash2(char name[8]) </p><p><b> {</b></p><p> int i = 1;</p><p> key2=(int)name[0];</p><p> while(name[i]!=NULL)&l
14、t;/p><p><b> {</b></p><p> key2+=(int)name[i];</p><p><b> i++;</b></p><p><b> }</b></p><p> key2=key2%20;</p>
15、<p><b> }</b></p><p> node* input() </p><p><b> {</b></p><p> node *temp;</p><p> temp = new node;</p>
16、;<p> temp->next=NULL;</p><p> cout<<"輸入姓名:"<<endl;</p><p> cin>>temp->name;</p><p> cout<<"輸入地址:"<<endl;</p>
17、;<p> cin>>temp->address;</p><p> cout<<"輸入電話:"<<endl;</p><p> cin>>temp->num;</p><p> return temp;</p><p><b>
18、 }</b></p><p> int apend() </p><p><b> {</b></p><p> node *newphone; </p><p> node *newname;</p><p>
19、 newphone=input();</p><p> newname=newphone;</p><p> newphone->next=NULL;</p><p> newname->next=NULL;</p><p> hash(newphone->num);</p><p> ha
20、sh2(newname->name);</p><p> newphone->next = phone[key]->next;</p><p> phone[key]->next=newphone;</p><p> newname->next = nam[key2]->next;</p><p>
21、 nam[key2]->next=newname;</p><p><b> return 0;</b></p><p><b> } </b></p><p> void create() </p><p><b>
22、; {</b></p><p><b> int i;</b></p><p> phone=new pnode[20];</p><p> for(i=0;i<20;i++)</p><p><b> {</b></p><p> phone
23、[i]=new node;</p><p> phone[i]->next=NULL;</p><p><b> }</b></p><p><b> }</b></p><p> void create2() </p>
24、<p><b> {</b></p><p><b> int i;</b></p><p> nam=new mingzi[20];</p><p> for(i=0;i<20;i++)</p><p><b> {</b></p>
25、<p> nam[i]=new node;</p><p> nam[i]->next=NULL;</p><p><b> }</b></p><p><b> }</b></p><p> void list()
26、 </p><p><b> {</b></p><p><b> int i;</b></p><p><b> node *p;</b></p><p> for(i=0;i<20;i++)</p><p><b>
27、{</b></p><p> p=phone[i]->next;</p><p><b> while(p)</b></p><p><b> {</b></p><p> cout<<p->name<<'_'<<p
28、->address<<'_'<<p->num<<endl;</p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> }<
29、/b></p><p> void list2() </p><p><b> {</b></p><p><b> int i;</b></p><p><b> node *p;</b></p&
30、gt;<p> for(i=0;i<20;i++)</p><p><b> {</b></p><p> p=nam[i]->next;</p><p><b> while(p)</b></p><p><b> {</b></p&
31、gt;<p> cout<<p->name<<'_'<<p->address<<'_'<<p->num<<endl;</p><p> p=p->next;</p><p><b> }</b></p>&l
32、t;p><b> }</b></p><p><b> }</b></p><p> void find(char num[11]) </p><p><b> {</b></p><p> hash(num);&
33、lt;/p><p> node *q=phone[key]->next;</p><p> while(q!= NULL)</p><p><b> {</b></p><p> if(strcmp(num,q->num)==0)</p><p><b> break;
34、</b></p><p> q=q->next;</p><p><b> }</b></p><p><b> if(q)</b></p><p> cout<<q->name<<"_" <<q->add
35、ress<<"_"<<q->num<<endl;</p><p> else cout<<"無此記錄"<<endl; </p><p><b> }</b></p><p> void find2(char name[8])
36、 </p><p><b> {</b></p><p> hash2(name);</p><p> node *q=nam[key2]->next;</p><p> while(q!= NULL)</p><p><b> {&
37、lt;/b></p><p> if(strcmp(name,q->name)==0)</p><p><b> break;</b></p><p> q=q->next;</p><p><b> }</b></p><p><b>
38、 if(q)</b></p><p> cout<<q->name<<"_" <<q->address<<"_"<<q->num<<endl;</p><p> else cout<<"無此記錄"<<e
39、ndl; </p><p><b> }</b></p><p> void save() </p><p><b> {</b></p><p><b> int i;</b></p><
40、;p><b> node *p;</b></p><p> for(i=0;i<20;i++)</p><p><b> {</b></p><p> p=phone[i]->next;</p><p><b> while(p)</b></p
41、><p><b> {</b></p><p> fstream iiout("out.txt", ios::out);</p><p> iiout<<p->name<<"_"<<p->address<<"_"<&l
42、t;p->num<<endl;</p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void men
43、u() </p><p><b> {</b></p><p> cout<<"0.添加記錄"<<endl;</p><p> cout<<"3.查找記錄"<<endl;</p&
44、gt;<p> cout<<"2.姓名散列"<<endl;</p><p> cout<<"4.號碼散列"<<endl;</p><p> cout<<"5.清空記錄"<<endl;</p><p> cout&l
45、t;<"6.保存記錄"<<endl;</p><p> cout<<"7.退出系統(tǒng)"<<endl;</p><p><b> }</b></p><p> int main()</p><p><b> {</b&g
46、t;</p><p> char num[11];</p><p> char name[8];</p><p><b> create();</b></p><p> create2() ;</p><p><b> int sel;</b></p>
47、<p><b> while(1)</b></p><p><b> {</b></p><p><b> menu();</b></p><p><b> cin>>sel;</b></p><p> if(sel==3
48、)</p><p> { cout<<"9號碼查詢,8姓名查詢"<<endl;</p><p><b> int b;</b></p><p><b> cin>>b;</b></p><p><b> if(b==9
49、)</b></p><p> {cout<<"請輸入電話號碼:"<<endl;</p><p> cin >>num;</p><p> cout<<"輸出查找的信息:"<<endl;</p><p> find(num);
50、</p><p><b> }</b></p><p><b> else</b></p><p> {cout<<"請輸入姓名:"<<endl;</p><p> cin >>name;</p><p> c
51、out<<"輸出查找的信息:"<<endl;</p><p> find2(name);}}</p><p> if(sel==2)</p><p> {cout<<"姓名散列結(jié)果:"<<endl;</p><p><b> list2(
52、);}</b></p><p> if(sel==0)</p><p> {cout<<"請輸入要添加的內(nèi)容:"<<endl;</p><p><b> apend();}</b></p><p> if(sel==4)</p><p&g
53、t; {cout<<"號碼散列結(jié)果:"<<endl;</p><p><b> list();</b></p><p><b> }</b></p><p> if(sel==5)</p><p> {cout<<"列表已清
54、空:"<<endl;</p><p> create();create2();}</p><p> if(sel==6)</p><p> { cout<<"通信錄已保存:"<<endl;</p><p><b> save();}</b><
55、;/p><p> if(sel==7) return 0;</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> 5.程序測試:程序運行后的結(jié)果:<
56、/p><p> 輸入數(shù)據(jù)后保存的結(jié)果:</p><p> 根據(jù)號碼查找的結(jié)果:</p><p> 根據(jù)姓名查找的結(jié)果:</p><p> 根據(jù)姓名散列的結(jié)果:</p><p> 根據(jù)號碼散列的結(jié)果:</p><p><b> 6. 總結(jié):</b></p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---哈希表的設(shè)計與實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--程序的設(shè)計與實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---城市鏈表的設(shè)計與實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---飛機訂票系統(tǒng)設(shè)計與實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計
- 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---家譜系統(tǒng)的設(shè)計與實現(xiàn)
評論
0/150
提交評論