哈希表《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)_第1頁(yè)
哈希表《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)_第2頁(yè)
哈希表《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)_第3頁(yè)
哈希表《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)_第4頁(yè)
哈希表《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

需求分析(1)輸入的形式和輸入值的范圍:數(shù)據(jù)的輸入在屏幕中進(jìn)行,所輸入的數(shù)據(jù)的格式為:姓名,住址,電話號(hào)碼。用戶使用時(shí)顯示菜單,用戶輸入菜單選項(xiàng)完成操作。(2)輸出的形式:查找的結(jié)果顯示在屏幕上,未被查找到的內(nèi)容輸出相應(yīng)的提示信息。用戶需要時(shí),將哈希表顯示在屏幕上。(3)程序所能達(dá)到的功能:根據(jù)用戶的要求,輸入聯(lián)系人的姓名,電話號(hào)碼。住址,分別以姓名和電話號(hào)碼作為關(guān)鍵字生成哈希表。生成哈希表后用戶可以根據(jù)相應(yīng)的關(guān)鍵字進(jìn)行數(shù)據(jù)的查找,若查找到對(duì)應(yīng)的數(shù)據(jù)則將數(shù)據(jù)輸出屏幕,若沒(méi)有查找到對(duì)應(yīng)的數(shù)據(jù)則將輸出提示信息表示未找到聯(lián)系人。在用戶選擇哈希表時(shí),顯示完整的哈希表。程序使用文字菜單的友好界面,在數(shù)據(jù)輸入時(shí)對(duì)輸入內(nèi)容進(jìn)行范圍控制。(4)測(cè)試數(shù)據(jù):在電腦屏幕中輸入記錄,令程序讀入并分別以姓名和電話號(hào)碼做為關(guān)鍵字生成哈希表,查找記錄中原有的記錄,查看輸出數(shù)據(jù),查找記錄中沒(méi)有的記錄輸出提示信息,查看整個(gè)哈希表的數(shù)據(jù)。清除所有的記錄后再次輸入信息查詢,屏幕輸出未查找到的提示信息,若錄入新的信息后,可保存信息,查詢,散列聯(lián)系人信息。

2開(kāi)發(fā)及運(yùn)行平臺(tái)硬件:微型計(jì)算機(jī)。軟件:VC++6.0。具體操作如下:新建……工程,添加相應(yīng)的源文件,再編譯,鏈接,執(zhí)行!3概要設(shè)計(jì)1.數(shù)據(jù)類型定義結(jié)構(gòu)體類型存儲(chǔ)每條記錄。structnode//建節(jié)點(diǎn){charname[8];//用于存放姓名charaddress[20];//用于存放地址charnum[11];//用于存放電話號(hào)碼node*next;};2.主程序流程創(chuàng)建存放記錄的結(jié)構(gòu)體數(shù)組查找記錄,分別可選擇姓名查詢和電話號(hào)碼查詢姓名散列號(hào)碼散列清空記錄保存記錄選擇退出系統(tǒng)3.各函數(shù)功能intapend();//添加節(jié)點(diǎn)voidcreate();//新建電話號(hào)碼的節(jié)點(diǎn)voidcreate2();//新建姓名的節(jié)點(diǎn)voidfind(charnum[11]);//通過(guò)電話號(hào)碼查找用戶信息voidfind2(charname[8]);//通過(guò)姓名查找用戶信息voidhash(charnum[11]);//哈希函數(shù),號(hào)碼散列voidhash2(charname[8]);//哈希函數(shù),姓名散列node*input();//輸入用戶信息voidlist();//通過(guò)姓名查找顯示用戶信息voidlist2()//通過(guò)電話號(hào)碼查找顯示列表

4詳細(xì)設(shè)計(jì)4.1數(shù)據(jù)類型定義structnode//建節(jié)點(diǎn){charname[8],address[20];charnum[11];};node*next;//定義結(jié)構(gòu)體主要算法//實(shí)現(xiàn)添加姓名,電話號(hào)碼,住址的新的內(nèi)存空間模塊兒intapend(){node*newphone;node*newname;newphone=input();newname=newphone;newphone->next=NULL;newname->next=NULL;hash(newphone->num);hash2(newname->name);newphone->next=phone[key]->next;phone[key]->next=newphone;newname->next=nam[key2]->next;nam[key2]->next=newname;return0;}//新建電話號(hào)碼節(jié)點(diǎn)函數(shù)voidcreate(){inti;phone=newpnode[20];for(i=0;i<20;i++){phone[i]=newnode;phone[i]->next=NULL;}}//新建名字節(jié)點(diǎn)函數(shù)voidcreate2(){inti;nam=newmingzi[20];for(i=0;i<20;i++){nam[i]=newnode;nam[i]->next=NULL;}}//通過(guò)電話號(hào)碼查找用戶信息函數(shù)voidfind(charnum[11]){hash(num);node*q=phone[key]->next;while(q!=NULL) {if(strcmp(num,q->num)==0)break;q=q->next; }if(q)cout<<q->name<<""<<q->address<<""<<q->num<<endl;elsecout<<"無(wú)此記錄"<<endl;}//通過(guò)姓名查找用戶信息函數(shù)voidfind2(charname[8]){hash2(name);node*q=nam[key2]->next;while(q!=NULL) {if(strcmp(name,q->name)==0)break;q=q->next; }if(q)cout<<q->name<<""<<q->address<<""<<q->num<<endl;else cout<<"無(wú)此記錄"<<endl;}//哈希函數(shù),用于電話號(hào)碼的散列功能voidhash(charnum[11]){inti=3;key=(int)num[2];while(num[i]!=NULL){key+=(int)num[i];i++;}key=key%20;}//哈希函數(shù),用于姓名的散列功能voidhash2(charname[8]){inti=1;key2=(int)name[0];while(name[i]!=NULL){key2+=(int)name[i];i++;}key2=key2%20;}//輸入函數(shù),用于輸入用戶的姓名,電話號(hào)碼,住址node*input()//輸入節(jié)點(diǎn){node*temp;temp=newnode;temp->next=NULL;cout<<"請(qǐng)輸入姓名:"<<endl;cin>>temp->name;cout<<"請(qǐng)輸入地址:"<<endl;cin>>temp->address;cout<<"請(qǐng)輸入電話:"<<endl;cin>>temp->num;returntemp;}//顯示列表函數(shù),用于顯示通過(guò)電話號(hào)碼查找到的用戶信息voidlist(){inti;node*p;for(i=0;i<20;i++){p=phone[i]->next;while(p) {cout<<p->name<<""<<p->address<<""<<p->num<<endl;p=p->next; }}}//顯示列表函數(shù),用于顯示通過(guò)姓名查找到的用戶信息voidlist2(){inti;node*p;for(i=0;i<20;i++){p=nam[i]->next;while(p) {cout<<p->name<<""<<p->address<<""<<p->num<<endl;p=p->next; }}}//菜單函數(shù),實(shí)現(xiàn)客戶選擇菜單進(jìn)行系統(tǒng)操作voidmenu(){cout<<"========歡迎進(jìn)入設(shè)計(jì)哈希表查詢電話號(hào)碼系統(tǒng)========"<<endl;cout<<endl;cout<<"0.添加記錄"<<endl;cout<<"1.查找記錄"<<endl;cout<<"2.姓名散列"<<endl;cout<<"3.號(hào)碼散列"<<endl;cout<<"4.清空記錄"<<endl;cout<<"5.保存記錄"<<endl;cout<<"6.退出系統(tǒng)"<<endl;cout<<endl;cout<<"請(qǐng)輸入你的選擇(0,1,2,3,4,5,6)"<<endl;}函數(shù)流程圖圖一哈希函數(shù)實(shí)現(xiàn)姓名散列圖二哈希函數(shù)實(shí)現(xiàn)電話號(hào)碼散列圖三輸入函數(shù)圖四電話號(hào)碼節(jié)點(diǎn)創(chuàng)建函數(shù)圖五姓名節(jié)點(diǎn)創(chuàng)建函數(shù)圖六通過(guò)電話查找顯示函數(shù)圖七通過(guò)姓名查找顯示函數(shù)圖八姓名查找函數(shù)圖九電話號(hào)碼查找函數(shù)圖十保存用戶信息函數(shù)圖十一主函數(shù)

5調(diào)試分析內(nèi)容包括:1.測(cè)試環(huán)境在Windows7環(huán)境下的MicrosoftVisualC++6.02.模塊調(diào)試寫(xiě)入數(shù)據(jù)時(shí),對(duì)數(shù)據(jù)的內(nèi)容的控制需要特別注意。要注意其字符組合模式,比如生成名字是應(yīng)該只有字幕,生成電話號(hào)碼是應(yīng)該只有數(shù)字,還要注意生成字符組合的長(zhǎng)度限制,比如電話號(hào)碼應(yīng)該是11位,這可以在循環(huán)語(yǔ)句中進(jìn)行控制。在哈希含查找時(shí)要注意取余的除數(shù)的一致,這是哈希表成立的關(guān)鍵點(diǎn)。3.復(fù)雜度分析使用哈希表存儲(chǔ)記錄,在執(zhí)行查找是可以快捷的進(jìn)行查找。選用在哈希法和為隨機(jī)探測(cè)再散列法。程序設(shè)定的哈希標(biāo)長(zhǎng)為50,文件數(shù)據(jù)長(zhǎng)度為30,則哈希表的填裝因子α為0.6,則查找成功時(shí)的平均查找長(zhǎng)度為Snr≈-In(1-0.6)6測(cè)試結(jié)果1.添加記錄2.查找記錄查找記錄姓名散列電話號(hào)碼散列清空記錄保存記錄退出系統(tǒng)

7結(jié)論數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)和現(xiàn)代計(jì)算機(jī)技術(shù)的實(shí)際應(yīng)用相結(jié)合,是我們?cè)诒倦A段學(xué)完理論課程之后對(duì)自己該方面的能力的一次很好的檢驗(yàn),從開(kāi)始的算法思路到運(yùn)行調(diào)試后的美觀的用戶界面以及可用程序,都是一個(gè)很好的學(xué)習(xí)和鍛煉的過(guò)程。使我們鞏固了原有的理論知識(shí),培養(yǎng)了我們靈活運(yùn)用和組合集成所學(xué)過(guò)知識(shí)及技能來(lái)分析、解決實(shí)際問(wèn)題的能力。但是在編寫(xiě)程序的過(guò)程中遇到了很多的困難,先是設(shè)計(jì)整個(gè)程序的思路,算法,以及模塊兒,由于對(duì)課程以及相關(guān)知識(shí)的一定欠缺,不能很順利的完成這項(xiàng)工作,再有就是寫(xiě)代碼的過(guò)程中出現(xiàn)很多語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤,通過(guò)編譯調(diào)試找到錯(cuò)誤并修改。這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的時(shí)間

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論