版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)報(bào)告</p><p> 題目:利用哈希技術(shù)統(tǒng)計(jì)C源程序關(guān)鍵字出現(xiàn)頻度</p><p> 學(xué)生姓名: </p><p> 學(xué) 號(hào): ______ </p><p> 班 級(jí): ____ </p&g
2、t;<p> 指導(dǎo)教師: _ </p><p> 2012年 6 月 18 日</p><p> 利用哈希技術(shù)統(tǒng)計(jì)C源程序關(guān)鍵字出現(xiàn)頻度</p><p><b> (1)題目?jī)?nèi)容:</b></p><p> 利用Hash技術(shù)統(tǒng)計(jì)某個(gè)C源程序中的關(guān)鍵字出現(xiàn)的頻
3、度</p><p><b> (2)基本要求:</b></p><p> 掃描一個(gè)C源程序,用Hash表存儲(chǔ)該程序中出現(xiàn)的關(guān)鍵字,并統(tǒng)計(jì)該程序中的關(guān)鍵字出現(xiàn)的頻度。用線性探測(cè)法解決Hash沖突。設(shè)Hash函數(shù)為:</p><p> Hash(key)[(key的第一個(gè)字母序號(hào))*100+(key的最后一個(gè)字母序號(hào))] MOD 41<
4、/p><p><b> 一、對(duì)題目的分析</b></p><p> 哈希表是為了便于快速搜索而組織的值組合的集合。Hash Table是一種數(shù)組,可以用任意簡(jiǎn)單變量值來(lái)訪問(wèn)其元素,這種數(shù)組叫做關(guān)聯(lián)數(shù)組,也叫哈希表。值對(duì)的集合。</p><p> 理想的情況下是希望不經(jīng)過(guò)任何比較,一次存儲(chǔ)就能得到所查到的記錄,那就必須在記錄的存儲(chǔ)位置和它的關(guān)鍵
5、字之間建立一個(gè)確定的對(duì)應(yīng)關(guān)系f,使每個(gè)關(guān)鍵字和結(jié)構(gòu)中一個(gè)唯一的存儲(chǔ)位置相對(duì)應(yīng)。</p><p> 基本要求:使用一個(gè)下標(biāo)范圍比較大的數(shù)組來(lái)存儲(chǔ)元素。可以設(shè)計(jì)一個(gè)函數(shù)(哈希函數(shù),也叫做散列函數(shù)),使得每個(gè)元素的關(guān)鍵字都與一個(gè)函數(shù)值(即數(shù)組下標(biāo),hash值)存在一一對(duì)應(yīng)的關(guān)系,于是用這個(gè)數(shù)組單元來(lái)存儲(chǔ)這個(gè)元素。使用hash表存儲(chǔ)關(guān)鍵字時(shí)難免會(huì)有不同的關(guān)鍵字對(duì)應(yīng)同一關(guān)鍵碼的情況,因此必須有個(gè)處理沖突的辦法。</
6、p><p><b> Hash函數(shù):</b></p><p> Hash(key)[(key的第一個(gè)字母序號(hào))*100+(key的最后一個(gè)字母序號(hào))] MOD 41</p><p><b> 二、處理沖突的方法</b></p><p> 處理沖突的辦法—線性探測(cè)法</p><
7、p> 用線性探法解決沖突時(shí),把有沖突的關(guān)鍵字往后推移直到有空位置的關(guān)鍵碼時(shí)再插入到hash表中。</p><p><b> C語(yǔ)言關(guān)鍵字:</b></p><p> C語(yǔ)言關(guān)鍵字是C語(yǔ)言的保留的一些單詞,這些單詞都有了固定的意義和用途,不可以作為變量或者自定義類(lèi)型或類(lèi)名來(lái)使用。其特點(diǎn)是都有小寫(xiě)字母構(gòu)成。</p><p> C語(yǔ)言關(guān)
8、鍵字有哪些:</p><p> double int structbreakelselongswitch caseenumregistercharextern returnunionconstfloatshortunsignedcontinuefor signedvoiddefaultgotosizeofvolatiledowhilestaticifa
9、utocase</p><p> 定義一個(gè)多維數(shù)組,數(shù)組第一行存放關(guān)鍵字,數(shù)組第二行存儲(chǔ)hash函數(shù)處理后關(guān)鍵字結(jié)點(diǎn)地址,用hash函數(shù)存儲(chǔ)關(guān)鍵字</p><p> Hash(Key)=[(Key第一個(gè)字符在1-26個(gè)字母中的序號(hào))*100+(Key最后一個(gè)字符在1-26個(gè)字母中的序號(hào))%41</p><p> 如此得到如for對(duì)應(yīng)地址3,if對(duì)應(yīng)于地址4,
10、int對(duì)應(yīng)地址18等等。</p><p> 哈希表 H(key)=keyMOD41 處理沖突為線性探測(cè)再散列。</p><p> 三、算法設(shè)計(jì)及部分函數(shù)</p><p> 打開(kāi)含關(guān)鍵字的CPP文件:</p><p> int Open(char *filename)</p><p><b> {&
11、lt;/b></p><p> char word[MaxLength],ch;</p><p><b> int i;</b></p><p> FILE *read; //指向FILE類(lèi)的指針*read</p><p> if((read=fopen
12、(filename,"r"))==NULL) //只讀方式讀取文件,如果為空</p><p><b> {</b></p><p> cout<<endl<<"未找到要打開(kāi)的文件,請(qǐng)重新輸入!";</p><p> return -1;
13、 //跳出Open函數(shù)</p><p><b> }</b></p><p> while(!feof(read)) //判斷文件是否結(jié)束,到末尾函數(shù)值為“真”即非0</p><p><b> {</b></p><p><b> i=0;</b>
14、</p><p> ch=fgetc(read); //讀取一個(gè)字符</p><p> while(LetterNot(ch)==0&&feof(read)==0)</p><p> ch=fgetc(read); //如果不是字母就接著讀取,關(guān)鍵字都是由字母組成的</p><p> while
15、(LetterNot(ch)==1&&feof(read)==0)</p><p><b> {</b></p><p> if(i==MaxLength)</p><p><b> {</b></p><p> while(LetterNot(ch)==1&&
16、;feof(read)==0)</p><p><b> {</b></p><p> ch=fgetc(read); //超過(guò)MAXLEN的長(zhǎng)度則一定不為關(guān)鍵字,把余下連一起的字母都讀取</p><p><b> }</b></p><p><b> i=0;<
17、/b></p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> word[i++]=c
18、h; //把讀取到的字母存入word數(shù)組中</p><p> ch=fgetc(read);</p><p><b> }</b></p><p><b> }</b></p><p> word[i]='\0';</p><p&g
19、t; if(KeywordsNot(word))</p><p><b> {</b></p><p> CreatHash(word);</p><p><b> }</b></p><p><b> }</b></p><p> fclo
20、se(read);</p><p> cout<<endl<<"文件中關(guān)鍵字已經(jīng)存入表中,請(qǐng)繼續(xù)!"<<endl<<endl<<endl;</p><p><b> }</b></p><p> 在Hash表中查找關(guān)鍵字找出關(guān)鍵字位置:</p>
21、<p> int FindHash(char *keyword) //在Hash表中查找關(guān)鍵字</p><p><b> {</b></p><p> int key,find,FindColl=0;</p><p> if(!KeywordsNot(keyword)) //是否關(guān)鍵字</p><
22、p> return -1;</p><p> key=GetHashValue(keyword);</p><p> if(strcmp(Test[key].keyword,keyword)==0)</p><p> return key;</p><p> for(find=key+1;find<LengthofHas
23、h;find++)</p><p> { //線性探測(cè)法</p><p> FindColl++; //FindColl統(tǒng)計(jì)沖突次數(shù)</p><p> if(strcmp(Test[find].keyword,keyword)==0)</p><p&g
24、t;<b> {</b></p><p> Test[find].coll=FindColl; //把沖突次數(shù)存入coll</p><p> return find;</p><p><b> }</b></p><p><b> }</b></p
25、><p> for(find=0;find<key;find++) //后面的找不到再?gòu)那懊骈_(kāi)始找</p><p><b> {</b></p><p> FindColl++;</p><p> if(strcmp(Test[find].keyword,keyword)==0)</p>&l
26、t;p><b> {</b></p><p> Test[find].coll=FindColl;</p><p> return find;</p><p><b> }</b></p><p><b> }</b></p><p>
27、 return -1;</p><p><b> }</b></p><p><b> 建立Hash表:</b></p><p> int CreatHash(char *keyword) //建立Hash表,keyword是一個(gè)數(shù)組</p><p><b> {</
28、b></p><p><b> int key;</b></p><p> if(!KeywordsNot(keyword)) //判斷是否關(guān)鍵字</p><p> return -1; </p><p> key=GetHashValue(keyword); //計(jì)
29、算Hash值</p><p> if(strlen(Test[key].keyword)>0) //Hash表中該位置存在關(guān)鍵字</p><p><b> { </b></p><p> if(strcmp(Test[key].keyword,keyword)==0) //Hash表中該位置的關(guān)鍵字相同</p>
30、<p><b> { </b></p><p> Test[key].count++; //頻度加1</p><p> return 1; //跳出函數(shù)</p><p><b> }</b></p><p>
31、; key=FindHash(keyword); //不相同,繼續(xù)查找</p><p> if(key<0) //沒(méi)有找到相等的keyword</p><p><b> {</b></p><p> key=Insert(GetHashValue(keyword));</p><p&g
32、t; if(key<0) //Hash表滿(mǎn)或者計(jì)算的Hash值有問(wèn)題</p><p> return -1;</p><p> strcpy(Test[key].keyword,keyword); //將關(guān)鍵字插入Hash表</p><p><b> }</b></p><p&
33、gt;<b> if(key<0)</b></p><p> return -1;</p><p> Test[key].count++;</p><p><b> }</b></p><p> else //該位置沒(méi)有關(guān)鍵字</p><p><b&g
34、t; {</b></p><p> strcpy(Test[key].keyword,keyword);</p><p> Test[key].count++;</p><p><b> }</b></p><p><b> return 1;</b></p>&
35、lt;p><b> }</b></p><p> 在Hash表中插入關(guān)鍵字:</p><p> int Insert(int key) //在Hash表中插入關(guān)鍵字</p><p><b> {</b></p><p> int find,FindColl=0;</p>
36、<p> if(key<0||key>=LengthofHash) </p><p> return -1;</p><p> for(find=key+1;find<LengthofHash;find++) //分塊查找后部分</p><p><b> {</b></p>&l
37、t;p> FindColl++;</p><p> if(strlen(Test[find].keyword)==0) //若這個(gè)地方為空</p><p><b> {</b></p><p> Test[find].coll=FindColl; //把沖突的次數(shù)存入coll中</p><
38、;p> return find; </p><p><b> }</b></p><p><b> }</b></p><p> for(find=0;find<key;find++) //分塊在前部分查找</p><p><b> {</b&
39、gt;</p><p> FindColl++;</p><p> if(strlen(Test[find].keyword)==0)</p><p><b> {</b></p><p> Test[find].coll=FindColl;</p><p> return find;&
40、lt;/p><p><b> }</b></p><p><b> }</b></p><p> return -1; //Hash表已滿(mǎn)</p><p><b> }</b></p><p><b> 四、算法的實(shí)現(xiàn)</b>
41、</p><p> a)引用庫(kù)函數(shù)定義變量</p><p> #include <iostream.h> </p><p> #include <string></p><p> #include <iomanip.h></p><p> #include <con
42、io.h></p><p> using namespace std;</p><p> const int LengthofHash=41; //Hash表長(zhǎng)度</p><p> int keycount=0; //統(tǒng)計(jì)Hash表中的關(guān)鍵字總數(shù)</p><p> const int Total=38; //38個(gè)關(guān)鍵字<
43、/p><p> const int MaxLength=20; </p><p> char KeyWords[Total][MaxLength]= //列舉38個(gè)關(guān)鍵字</p><p><b> {</b></p><p> "bool","break","case
44、","catch","char",</p><p> "class","const","continue","default","do",</p><p> "double","else",&quo
45、t;enum","extern","false",</p><p> "float","for","goto","if","int",</p><p> "interrupt","long",&qu
46、ot;new","private","public",</p><p> "register","return","short","signed","sizeof",</p><p> "static","s
47、truct","switch","typedef","union",</p><p> "unsigned","void","while",</p><p><b> };</b></p><p> b)類(lèi)的
48、構(gòu)造及類(lèi)的對(duì)象</p><p> class ConuntNum </p><p><b> {</b></p><p><b> public:</b></p><p> int coll; //collision沖突次數(shù)</p><p> int count;
49、//出現(xiàn)次數(shù)(頻度)</p><p> char keyword[MaxLength];</p><p><b> }; </b></p><p> ConuntNum Test[LengthofHash];</p><p><b> c)函數(shù)的聲明部分</b></p>&
50、lt;p> void Menu();</p><p> void PrintScreen(int key);</p><p> int Open(char *filename); </p><p> int LetterNot(char ch);</p><p> int KeywordsNot(char *word);<
51、;/p><p> int FindHash(char *keyword);</p><p> int CreatHash(char *keyword);</p><p> int Insert(int key);</p><p> int GetHashValue(char *keyword);</p><p>
52、 d)在Hash表中分塊查找</p><p> int FindHash(char *keyword) //在Hash表中查找關(guān)鍵字</p><p><b> {</b></p><p> int key,find,FindColl=0;</p><p> if(!KeywordsNot(keyword))
53、 //是否關(guān)鍵字</p><p> return -1;</p><p><b> …………</b></p><p><b> }</b></p><p><b> 五、源代碼</b></p><p> #include <iostr
54、eam.h> </p><p> #include <string></p><p> #include <iomanip.h></p><p> #include <conio.h></p><p> using namespace std;</p><p> c
55、onst int LengthofHash=41; //Hash表長(zhǎng)度</p><p> int keycount=0; //統(tǒng)計(jì)Hash表中的關(guān)鍵字總數(shù)</p><p> const int Total=38; //38個(gè)關(guān)鍵字</p><p> const int MaxLength=20; </p><p> char KeyW
56、ords[Total][MaxLength]= //列舉38個(gè)關(guān)鍵字</p><p><b> {</b></p><p> "bool","break","case","catch","char",</p><p> "clas
57、s","const","continue","default","do",</p><p> "double","else","enum","extern","false",</p><p> &q
58、uot;float","for","goto","if","int",</p><p> "interrupt","long","new","private","public",</p><p>
59、"register","return","short","signed","sizeof",</p><p> "static","struct","switch","typedef","union",</p
60、><p> "unsigned","void","while",</p><p><b> };</b></p><p> class ConuntNum </p><p><b> {</b></p><p>
61、;<b> public:</b></p><p> int coll; //collision沖突次數(shù)</p><p> int count; //出現(xiàn)次數(shù)(頻度)</p><p> char keyword[MaxLength];</p><p><b> }; </b></
62、p><p> ConuntNum Test[LengthofHash];</p><p><b> //先聲明后使用</b></p><p> void Menu();</p><p> void PrintScreen(int key);</p><p> int Open(char *f
63、ilename); </p><p> int LetterNot(char ch);</p><p> int KeywordsNot(char *word);</p><p> int FindHash(char *keyword);</p><p> int CreatHash(char *keyword);</p>
64、<p> int Insert(int key);</p><p> int GetHashValue(char *keyword);</p><p> void main()</p><p><b> {</b></p><p><b> char opt;</b><
65、/p><p> int option=1,i,count,key,has;</p><p> char filename[50],word[MaxLength];</p><p> while(option)</p><p> { Menu();</p><p><b> cin>>op
66、t;</b></p><p> switch(opt)</p><p><b> {</b></p><p><b> case '1':</b></p><p> system("cls");</p><p> co
67、ut<<"請(qǐng)輸入文件名:";</p><p> cin>>filename;</p><p> Open(filename);</p><p> cout<<endl;</p><p><b> continue;</b></p><p&
68、gt;<b> break;</b></p><p><b> case '2':</b></p><p> system("cls");</p><p> cout<<"按回車(chē)鍵繼續(xù)顯示!"<<endl;</p><
69、;p> for(i=0;i<LengthofHash;i++)</p><p><b> {</b></p><p> PrintScreen(i); </p><p> if((i+1)%10==0)</p><p> getchar(); //10行一循環(huán)</p><p&g
70、t;<b> }</b></p><p> cout<<"CPP文件中關(guān)鍵字總數(shù)為:"<<keycount<<endl;</p><p> cout<<endl<<endl<<endl<<endl<<endl;</p><p&g
71、t;<b> continue;</b></p><p> system("cls");</p><p><b> break;</b></p><p><b> case '3':</b></p><p> system(&quo
72、t;cls");</p><p> cout<<"沖突關(guān)鍵字列表:"<<endl<<endl;</p><p><b> count=0;</b></p><p> for(i=0;i<LengthofHash;i++)</p><p><
73、;b> {</b></p><p> if(strlen(Test[i].keyword)>0)</p><p><b> {</b></p><p> key=GetHashValue(Test[i].keyword);</p><p> if(key!=i)</p>&
74、lt;p><b> {</b></p><p><b> count++;</b></p><p> cout<<"\t關(guān)鍵字"<<Test[i].keyword;</p><p> cout<<"\tHash表當(dāng)前位置:"<&
75、lt;i;</p><p> cout<<"\t沖突次數(shù):"<<Test[i].coll<<endl;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
76、;</p><p> if(count==0) </p><p> cout<<"沒(méi)有沖突"<<endl<<endl<<endl<<endl<<endl;</p><p><b> else</b></p><p> co
77、ut<<endl<<"\t\t\t沖突關(guān)鍵字共:"<<count<<"個(gè)"<<endl;</p><p> cout<<endl<<endl<<endl<<endl<<endl;</p><p><b> contin
78、ue;</b></p><p> system("cls");</p><p><b> break;</b></p><p><b> case '4':</b></p><p> system("cls");</p
79、><p> cout<<"輸入你想要查找的關(guān)鍵字: "<<endl;</p><p> cin>>word;</p><p> cout<<endl;</p><p> PrintScreen(FindHash(word));</p><p>
80、cout<<endl;</p><p><b> continue;</b></p><p> system("cls");</p><p><b> break;</b></p><p><b> case '5':</b&g
81、t;</p><p><b> option=0;</b></p><p><b> break;</b></p><p><b> default:</b></p><p> system("cls");</p><p>&
82、lt;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int Open(char *filename)</p><p><b> {</b></p><p>
83、char word[MaxLength],ch;</p><p><b> int i;</b></p><p> FILE *read; //指向FILE類(lèi)的指針*read</p><p> if((read=fopen(filename,"r"))==NULL)
84、 //只讀方式讀取文件,如果為空</p><p><b> {</b></p><p> cout<<endl<<"未找到要打開(kāi)的文件,請(qǐng)重新輸入!";</p><p> return -1; //跳出Open函數(shù)</p><p&g
85、t;<b> }</b></p><p> while(!feof(read)) //判斷文件是否結(jié)束,到末尾函數(shù)值為“真”即非0</p><p><b> {</b></p><p><b> i=0;</b></p><p> ch=fgetc(
86、read); //讀取一個(gè)字符</p><p> while(LetterNot(ch)==0&&feof(read)==0)</p><p> ch=fgetc(read); //如果不是字母就接著讀取,關(guān)鍵字都是由字母組成的</p><p> while(LetterNot(ch)==1&&feof(
87、read)==0)</p><p><b> {</b></p><p> if(i==MaxLength)</p><p><b> {</b></p><p> while(LetterNot(ch)==1&&feof(read)==0)</p><p
88、><b> {</b></p><p> ch=fgetc(read); //超過(guò)MAXLEN的長(zhǎng)度則一定不為關(guān)鍵字,把余下連一起的字母都讀取</p><p><b> }</b></p><p><b> i=0;</b></p><p><b
89、> break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> word[i++]=ch; //把讀取到的字母存入word數(shù)組
90、中</p><p> ch=fgetc(read);</p><p><b> }</b></p><p><b> }</b></p><p> word[i]='\0';</p><p> if(KeywordsNot(word))</p&
91、gt;<p><b> {</b></p><p> CreatHash(word);</p><p><b> }</b></p><p><b> }</b></p><p> fclose(read);</p><p>
92、cout<<endl<<"文件中關(guān)鍵字已經(jīng)存入表中,請(qǐng)繼續(xù)!"<<endl<<endl<<endl;</p><p><b> }</b></p><p> int LetterNot(char ch) //判斷是否是字母</p><p><b>
93、{</b></p><p> if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))</p><p> return 1; </p><p><b> else</
94、b></p><p> return 0; </p><p><b> }</b></p><p> int FindHash(char *keyword) //在Hash表中查找關(guān)鍵字</p><p><b> {</b></p><p>
95、 int key,find,FindColl=0;</p><p> if(!KeywordsNot(keyword)) //是否關(guān)鍵字</p><p> return -1;</p><p> key=GetHashValue(keyword);</p><p> if(strcmp(Test[key].keyword,ke
96、yword)==0)</p><p> return key;</p><p> for(find=key+1;find<LengthofHash;find++)</p><p> { //線性探測(cè)法</p><p> FindColl++;
97、 //FindColl統(tǒng)計(jì)沖突次數(shù)</p><p> if(strcmp(Test[find].keyword,keyword)==0)</p><p><b> {</b></p><p> Test[find].coll=FindColl; //把沖突次數(shù)存入coll</p><p> ret
98、urn find;</p><p><b> }</b></p><p><b> }</b></p><p> for(find=0;find<key;find++) //后面的找不到再?gòu)那懊骈_(kāi)始找</p><p><b> {</b></p>
99、<p> FindColl++;</p><p> if(strcmp(Test[find].keyword,keyword)==0)</p><p><b> {</b></p><p> Test[find].coll=FindColl;</p><p> return find;</p&
100、gt;<p><b> }</b></p><p><b> }</b></p><p> return -1;</p><p><b> }</b></p><p> int CreatHash(char *keyword) //建立Hash表
101、,keyword是一個(gè)數(shù)組</p><p><b> {</b></p><p><b> int key;</b></p><p> if(!KeywordsNot(keyword)) //判斷是否關(guān)鍵字</p><p> return -1; </p&g
102、t;<p> key=GetHashValue(keyword); //計(jì)算Hash值</p><p> if(strlen(Test[key].keyword)>0) //Hash表中該位置存在關(guān)鍵字</p><p><b> { </b></p><p> if(strcmp(Test[ke
103、y].keyword,keyword)==0) //Hash表中該位置的關(guān)鍵字相同</p><p><b> { </b></p><p> Test[key].count++; //頻度加1</p><p> return 1; //跳出函數(shù)</p>
104、<p><b> }</b></p><p> key=FindHash(keyword); //不相同,繼續(xù)查找</p><p> if(key<0) //沒(méi)有找到相等的keyword</p><p><b> {</b></p><p> ke
105、y=Insert(GetHashValue(keyword));</p><p> if(key<0) //Hash表滿(mǎn)或者計(jì)算的Hash值有問(wèn)題</p><p> return -1;</p><p> strcpy(Test[key].keyword,keyword); //將關(guān)鍵字插入Hash表</p>
106、<p><b> }</b></p><p><b> if(key<0)</b></p><p> return -1;</p><p> Test[key].count++;</p><p><b> }</b></p><
107、p> else //該位置沒(méi)有關(guān)鍵字</p><p><b> {</b></p><p> strcpy(Test[key].keyword,keyword);</p><p> Test[key].count++;</p><p><b> }</b></p>&
108、lt;p><b> return 1;</b></p><p><b> }</b></p><p> int Insert(int key) //在Hash表中插入關(guān)鍵字</p><p><b> {</b></p><p> int find,FindCo
109、ll=0;</p><p> if(key<0||key>=LengthofHash) </p><p> return -1;</p><p> for(find=key+1;find<LengthofHash;find++) //分塊查找后部分</p><p><b> {</b>
110、;</p><p> FindColl++;</p><p> if(strlen(Test[find].keyword)==0) //若這個(gè)地方為空</p><p><b> {</b></p><p> Test[find].coll=FindColl; //把沖突的次數(shù)存入coll中
111、</p><p> return find; </p><p><b> }</b></p><p><b> }</b></p><p> for(find=0;find<key;find++) //分塊在前部分查找</p><p><
112、b> {</b></p><p> FindColl++;</p><p> if(strlen(Test[find].keyword)==0)</p><p><b> {</b></p><p> Test[find].coll=FindColl;</p><p>
113、 return find;</p><p><b> }</b></p><p><b> }</b></p><p> return -1; //Hash表已滿(mǎn)</p><p><b> }</b></p><p> int Keyword
114、sNot(char *word) //判斷是否關(guān)鍵字</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<Total;i++)</p><p> if(strcmp(word,KeyWords[i])==0)
115、</p><p><b> return 1;</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> void PrintScreen(int key)</p><p><b&
116、gt; { </b></p><p> if(key<0||key>=LengthofHash)</p><p><b> {</b></p><p> cout<<"關(guān)鍵字不存在!"<<endl;</p><p><b> re
117、turn;</b></p><p><b> }</b></p><p> if(strlen(Test[key].keyword)==0)</p><p><b> {</b></p><p> cout<<"Hash表位置: "<<
118、key<<" 記錄是空的!"<<endl;</p><p><b> return;</b></p><p><b> }</b></p><p> cout<<"Hash表位置: "<<key<<"\t&
119、quot;<<"關(guān)鍵字: "<<Test[key].keyword<<"\t\t"<<"出現(xiàn)次數(shù):"<<Test[key].count<<endl;</p><p> keycount++;</p><p><b> }</b><
120、;/p><p> int GetHashValue(char *keyword) </p><p> { int HashValue;</p><p> HashValue=(keyword[0]*100+keyword[strlen(keyword)-1])%41;</p><p> return HashValue;</
121、p><p><b> }</b></p><p> void Menu()</p><p><b> {</b></p><p> cout<<"\t\t**********************************"<<endl;</p&
122、gt;<p> cout<<"\t\t* 1.讀取CPP文件 *"<<endl;</p><p> cout<<"\t\t* 2.輸出Hash表中的關(guān)鍵字 *"<<endl;</p><p> cout<<"\t
123、\t* 3.顯示沖突的關(guān)鍵字 *"<<endl;</p><p> cout<<"\t\t* 4.在Hash表中查找關(guān)鍵字 *"<<endl;</p><p> cout<<"\t\t* 5.退出 *"
124、<<endl;</p><p> cout<<"\t\t* 請(qǐng)選擇(1--5): *"<<endl;</p><p> cout<<"\t\t**********************************"<<endl;</p>&
125、lt;p><b> }</b></p><p> 六、程序運(yùn)行結(jié)果截圖</p><p><b> 圖1 程序運(yùn)行界面</b></p><p> 圖2 載入含關(guān)鍵字的CPP</p><p> 圖3 輸出Hash表中的關(guān)鍵字</p><p> 圖4 顯示沖突的關(guān)
126、鍵字</p><p> 圖5 查找關(guān)鍵字在Hash表中的位置</p><p> 七、課程設(shè)計(jì)心得體會(huì)</p><p> 這次課程設(shè)計(jì)讓我了解到自己在Hash表這一塊有著許多的不足,在各方面都缺乏最重要的知識(shí)。</p><p> 通過(guò)這次課程設(shè)計(jì),我了解到自己在實(shí)踐操作方面還有很多不足,在實(shí)踐過(guò)程中老師和同學(xué)給了我很大的幫助和鼓勵(lì),學(xué)會(huì)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)報(bào)告---關(guān)鍵字統(tǒng)計(jì)程序
- c語(yǔ)言課程設(shè)計(jì)源程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---利用hash技術(shù)統(tǒng)計(jì)單詞的頻度
- 課程設(shè)計(jì)--c語(yǔ)言關(guān)鍵字中英翻譯機(jī)
- c語(yǔ)言課程設(shè)計(jì)--c語(yǔ)言關(guān)鍵字中英翻譯機(jī)
- c語(yǔ)言課程設(shè)計(jì)(成績(jī)管理系統(tǒng))源程序
- 單詞出現(xiàn)次數(shù)統(tǒng)計(jì)課程設(shè)計(jì)報(bào)告
- 打字練習(xí)課程設(shè)計(jì)報(bào)告(內(nèi)附源程序)
- c課程設(shè)計(jì)報(bào)告-- c語(yǔ)言程序設(shè)計(jì)
- 成績(jī)統(tǒng)計(jì)程序課程設(shè)計(jì)報(bào)告
- 重疊保留法源程序設(shè)計(jì)課程設(shè)計(jì)
- c程序課程設(shè)計(jì)報(bào)告(掃雷游戲)
- c#中的關(guān)鍵字大全
- c課程設(shè)計(jì)報(bào)告-- windows程序設(shè)計(jì)報(bào)告
- c語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告-- linux c 程序設(shè)計(jì)
- 《c語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- c#常用關(guān)鍵字及含義
- 關(guān)鍵字
- c++程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論