哈希表實(shí)現(xiàn)電話號碼查詢系統(tǒng)_第1頁
哈希表實(shí)現(xiàn)電話號碼查詢系統(tǒng)_第2頁
哈希表實(shí)現(xiàn)電話號碼查詢系統(tǒng)_第3頁
哈希表實(shí)現(xiàn)電話號碼查詢系統(tǒng)_第4頁
哈希表實(shí)現(xiàn)電話號碼查詢系統(tǒng)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

、掌握現(xiàn)實(shí)復(fù)雜問題的分析建模和解決方法(包括題的基本能力。①讀取原電話本存儲的電話信息。2)查找信息①根據(jù)電話號碼查詢用戶信息。②根據(jù)姓名查詢用戶信息。3)存儲信息查詢無記錄的結(jié)果存入記錄文檔。2)數(shù)據(jù)文件“new.txt”存放有系統(tǒng)隨機(jī)生成的3)數(shù)據(jù)文件“out.txt”存放未查找到的電話信1)從數(shù)據(jù)文件“old.txt”中讀入各項(xiàng)記錄,或由系統(tǒng)隨機(jī)產(chǎn)生各記錄,并且把記錄保存到“new.txt”中。2)分別采用偽隨機(jī)探測再散列法和再哈希法解3)根據(jù)姓名查找時顯示給定姓名用戶的記錄。4)根據(jù)電話號碼查找時顯示給定電話號碼的用t序以用戶和計算機(jī)的對話方式進(jìn)行。intCollision_Random(intkey,inti)//偽隨機(jī)數(shù)探量觀測再散列法處理沖突voidInit_HashTable_by_name(stringname,stringphone,stringaddress)//以姓名為關(guān)鍵字建立哈希表intCollision_Rehash(intkey,string//再哈希法處理沖突voidInit_HashTable_by_phone(stringname,stringphone,stringaddress)//以電話號碼為關(guān)鍵字建立哈希表voidOutfile(stringname,intkey)//在沒有找到時輸出未找到的記錄,打開voidOuthash(intkey)//輸出哈希表中的記錄init-hashtable-by-name()Seach-by-phone()Collision-rehash()init-hashtable-by-name()Seach-by-phone()Collision-rehash()voidRafile()//隨機(jī)生成數(shù)據(jù),并將數(shù)據(jù)保存在new.txtvoidInit_HashTable(char*fname,intn)希表intSearch_by_name(stringname)//根據(jù)姓名查找哈希表中的記錄intSearch_by_phone(stringphone)//根據(jù)電話號碼查找哈希表中的記錄main()Refile()init-hashtable()init-hashtable-by-phone()Seach-by-name()Coiiision-random()Outhash()01 2電話號碼查找1221輸入電話號碼顯示哈希表顯示哈希表輸入姓名無此記錄顯示信息顯示信息無此記錄0寫入“out.txt”寫入“out.txt”001 2電話號碼查找1221輸入電話號碼顯示哈希表顯示哈希表輸入姓名無此記錄顯示信息顯示信息無此記錄0寫入“out.txt”寫入“out.txt”0開始開始 2選擇數(shù)據(jù)來 2建建“new.txt”選擇查找方選擇查找方式11姓名查找姓名查找結(jié)結(jié)束鍵字=(原關(guān)鍵字+偽隨機(jī)數(shù))%哈希表長。nery為關(guān)鍵字,分別為前四位、中四位、后三位。再用“除留余數(shù)法”求的新的關(guān)鍵字=原關(guān)表長。沖突,然后將數(shù)據(jù)存入哈希表。數(shù)據(jù)存入哈希表。、哈誤。修改后程序運(yùn)行正確。但是原數(shù)據(jù)是從“old.txt”文件中讀取的,剛參考書的幫助下終于得到解決。3、關(guān)于偽隨機(jī)和再哈希的相關(guān)內(nèi)容覺得很難懂,看了很久參考書才有所了解六測試結(jié)果2)姓名查找失敗)哈希表4)哈希表ry用說明“old.txt”文件中的數(shù)據(jù)或系統(tǒng)當(dāng)前自動生成的“new.txt”文件。ry或“根據(jù)電話號碼查找”兩種查找方式。ryryryryry時鍛煉了對話形式的菜單的創(chuàng)建和熟練運(yùn)用。ry在這次數(shù)據(jù)結(jié)構(gòu)設(shè)計中遇到了很多實(shí)際性礎(chǔ)慢慢開始弄懂它。ry#include<fstream>#include<iostream>#include<string>usingnamespacestd;ofstreamout_file;D[10]={1,3,5,8,13,15,17,21,27,34};//偽隨intcountintsizeindex度char*sign;//沖突的標(biāo)志{ryress};Data*intermediate_data;{key{Re_key=(key+D[i])%sizeindex;returnRe_key;//歸回新的要害碼}return-1;}voidInit_HashTable_by_name(stringname,stringphone,stringaddress)//以姓名為關(guān)鍵字建立哈希表{for(key=0,p=&name[0];*p;p++)key=key+*p;key=key%42;while(sign[key]=='1')ry{key=Collision_Random(key,i+1);}intermediate_data[key].name=name;//將intermediate_data[key].address=addresintermediate_data[key].phone=phone;sign[key]='1';//設(shè)置沖突標(biāo)志}intCollision_Rehash(intkey,stringr{num1=(str[0]-'0')*1000+(str[1]-'0')*100+(str[2]-'0')*10+(str[3]-'0');num2=(str[4]-'0')*1000+(str[5]-'0')*100+(str[6]-'0')*10+(str[7]-'0');num3=(str[8]-'0')*100+(str[9]-'0')*10+(str[10]-'0');Re_key=num1+num2+num3;Re_key=(Re_key+key)%sizeindex;returnRe_key;ry}voidInit_HashTable_by_phone(stringname,stringphone,stringaddress)//以電話號碼為關(guān)鍵字建立哈希表{for(key=0,p=&phone[0];*p;p++)key=key+*p;key=key%42;while(sign[key]=='1'){key=Collision_Rehash(key,phone);}intermediate_data[key].name=name;intermediate_data[key].address=addresintermediate_data[key].phone=phone;ey}voidOutfile(stringname,intkey)//在沒有找到時輸出未找到的記錄,打開文件{ry{{cout<<"\n"<<"文件打開失敗!!!\n"<<endl;}out_file<<name<<endl;out_file.close();}}voidOuthash(intkey)//輸出哈希表中的{unsignedi;{cout<<"\n"<<"無此記錄!!!\n"<<endl;}{for(i=0;i<strlen(&(intermediate_data[key].name[0]));i++)cout<<intermediate_data[key].name[i];ryfor(i=0;i<8;i++)cout<<intermediate_data[key].phone;for(i=0;i<8;i++)cout<<intermediate_data[key].address<<e}}voidRafile()//隨機(jī)生成數(shù)據(jù),并將數(shù)據(jù){{cout<<"\n"<<"文件打開失敗!!!\n"<<endl;}for(j=0;j<30;j++){namefor(i=0;i<20;i++)name+=rand()%26+'a';out_file<<name<<"";ngphoneryfor(i=0;i<11;i++)phone+=rand()%10+'0';out_file<<phone<<"";tringaddressfor(i=0;i<29;i++)address+=rand()%26+'a';address+=',';out_file<<address<<endl;}out_file<<"*";out_file.close();}voidInit_HashTable(char*fname,intn)//建立哈希表{namengphonetringaddress{cout<<"\n"<<"文件打開失敗!!!\n"<<endl;}while(!in_file.eof()){rychar*str=newchar[100];name";phone="";address";in_file.getline(str,100,'\n');//按ifstr*')//判斷數(shù)據(jù)結(jié)束reakfor(;str[i]!='';i++)name+=str[i];while(str[i]=='')for(j=0;str[i]!='';j++,i++)phone+=str[i];while(str[i]=='')for(j=0;str[i]!=',';j++,i++)address+=str[i];Init_HashTable_by_name(name,phone,addreelseInit_HashTable_by_phone(name,phone,address);//以電話號碼為關(guān)鍵字str}ry}intSearch_by_name(stringname)//根據(jù)姓名查找哈希表中的記錄{for(key=0,p=&name[0];*p;p++)key=key+*p;key=key%42;while(sign[key]=='1'&&(intermediate_data[key].name!=name)){key=Collision_Random(key,i+1);return-1;}returnkey;}intSearch_by_phone(stringphone)//根據(jù)電話號碼查找哈希表中的記錄{ryfor(key=0,p=&phone[0];*p;p++)key=key+*p;key=key%42;while(sign[key]=='1'&&(intermediate_data[key].phone!=phone)){key=Collision_Rehash(key,phone);return-1;}returnkey;}voidmain(){rFnamesign=newchar[sizeindex];iatedatanewData[sizeindex];ryfor(i=0;i<sizeindex;i++)for(i=0;i<sizeindex;i++){intermediate_data[i].name="";intermediate_data[i].phone="";intermediate_data[i].address="";}cout<<"§**********************************************************§"<<endl;*§"<<endl;*§"<<endl;*§"<<endl;cout<<"§*隨機(jī)生成cout<<"§*退出程序*§"<<endl;*§"<<endl;*§"<<endl;cout<<"§**********************************************************§"<<endl;ry{cout<<"\n"<<"請輸入選擇:\n";{turnFname="old.txt";reakRafile();Fname="new.txt";reakcout<<"輸入序號有誤,請重新輸入!!!\n"<<endl;}}while((k!=1)&&(k!=2)&&(k!=0));//system("cls");cout<<"§**********************************************************§"<<endl;ry*§"<<endl;查找方式*§"<<endl;據(jù)姓名查找據(jù)電話號查找*§"<<endl;*§"<<endl;cout<<"§**********************************************************§"<<endl;{cout<<"\n"<<"請輸入選擇:\n";{cout<<"輸入序號有誤,請重新輸入!!!\n"<<endl;}}while((ch!=1)&&(ch!=2));//system("cls");ryInit_HashTable(Fname,ch);while(ch==1){cout<<"§**********************************************************§"<<endl;*§"<<endl;cout<<"§*擇功能"<<endl;cout<<"§**§"<<endl;希表cout<<"§**§"<<endl;*§"<<endl;*§"<<endl;*§"<<endl;cout<<"§**********************************************************§"<<endl;{rychoicece{{cout<<"\n"<<"請輸入姓名:\n";key1=Search_by_name(name);Outfile(name,key1);n<endl;cout"\n"<<"查找Outhash(key1);}reak{表:\n"<<endl;for(i=0;i<sizeindex;i++){{ryoutOuthash(i);}}cout<<"**"<<endl;}reakturn輸入!!!\n"<<endl;}}while((choice!=1)&&(choice!=2)&&(cho

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論