資源簡介
1)、先用Hash表存儲c語言中32個關鍵字,再掃描c源程序取出每個單詞,利用Hash查找技術統計該程序中的關鍵字出現的頻度。發生Hash沖突用線性探測法解決。設Hash函數為:
Hash(key)=[(key的第一個字母序號)*100+(key的最后一個字母序號)] MOD 41。
(2)、用順序表存儲c語言中的關鍵字,把c源程序取出每個單詞利用二分查找技術統計該程序中的關鍵字的出現頻度。

代碼片段和文件信息
#include
#include?/*?malloc()等?*/
#include?/*?EOF(=^Z或F6)NULL?*/
#include?/*?atoi()?*/
#include?/*?floor()ceil()abs()?*/
typedef?int?Status;?/*?Status是函數的類型其值是函數結果狀態代碼,如OK等?*/
typedef?int?Boolean;?/*?Boolean是布爾類型其值是TRUE或FALSE?*/
typedef?char?ElemType;
#define?TOTAL?32?//32個關鍵字
#define?MAXLEN?10?//關鍵字長度
#define?HASHLEN?41??//哈希表長度
int?cont=0;??//統計哈希表中的關鍵字個數
#define?LIST_INIT_SIZE?100?/*?線性表存儲空間的初始分配量?*/
#define?LISTINCREMENT?10?/*?線性表存儲空間的分配增量?*/
typedef?struct
{
???ElemType?*elem;?/*?存儲空間基址?*/
???int?length;?/*?當前長度?*/
???int?listsize;?/*?當前分配的存儲容量(以sizeof(ElemType)為單位)?*/
}SqList;
typedef?struct?HASH??//哈希表
{
????char?keyword[MAXLEN];
int?count;??//出現次數(頻度)
int?con;??//沖突次數
};??
HASH?HS[HASHLEN];
char?KeyWords[TOTAL][MAXLEN]=??//構造二維數組存儲32個關鍵字
{
“auto““break““case““char““const““continue“
“default““do““double““else““enum““extern“
“float““for““goto““if““int““long““register“
“return““short““signed““sizeof““static“
“struct““switch““typedef““union““unsigned“
“void““volatile““while“
};
void?ResetHX()???//重置哈希表,
{
int?i;
for(i=0;i {
strcpy(HS[i].keyword““);?//不能用等號賦值
HS[i].count=0;
HS[i].con=0;
}
}?
void?jiemian()
{
printf(“\n“);
printf(“\n“);
printf(“\t========1.讀取一個文件===========================================\n“);
printf(“\t========2.輸出Hash表(關鍵字總數,沖突次數)=======================\n“);
printf(“\t========3.查詢某關鍵字在Hash表中的情況===========================\n“);
printf(“\t========4.顯示Hash表中的沖突關鍵字===============================\n“);
printf(“\t========5.顯示C語言關鍵字的Hash函數值(作為對照)==================\n“);
printf(“\t========6.返回主頁===============================================\n“);
????printf(“\t========7.退出===================================================\n“);
}
int?isLetter(char?ch)?//判斷是否是字母,因為關鍵字都是英文單詞
{
if(?(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)?)?return?1;
else?return?0;
//是字母就返回1,否則返回0值
}
int?isKeyWords(char?*word)????//判斷是否關鍵字
{
int?i;
for(i=0;i if(strcmp(wordKeyWords[i])==0)?
return?1;?
}
int?GetKey(char?*keyword)??//哈西函數
{??//Hash函數為:Hash(Key)=[(Key的首字母序號)*100+(Key的尾字母序號)]?Mod?41
return?(?keyword[0]*100+keyword[strlen(keyword)-1]?)?%?41;
}?
int?FindHX(char?*keyword)???//查找哈希表,分塊查找
{
int?keyfindtem=0;
????if(!isKeyWords(keyword))?return?-1;
key=GetKey(keyword);??
if(strcmp(HS[key].keywordkeyword)==0)?return?key;
????for(find=key+1;find { //線性探查法順序查找哈希表中是否已存在關鍵字
tem++;??//統計沖突次數
if(strcmp(HS[find].keywordkeyword)==0)
{
HS[find].con=tem;
return?find;?
}
}
????for(find=0;find {
tem++;
if(strcmp(HS[find].keywordkeyword)==0){
HS[find].con=tem;
return?find;?}
}
}?
int?GetFreePos(int?key)??//在哈希表中給關鍵字找個位置插進去
{
int?findtem=0;
if(key<0||key>=HASHLEN)?return?-1;
for(find=key+1;find {
tem++;
if(strlen(HS[find].keyword)==0){
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2011-06-15?11:24??課程設計\
?????文件?????????486??2011-06-04?16:10??課程設計\guanjianzi.txt
?????文件???????13138??2011-06-15?10:00??課程設計\利用Hash技術統計C源程序中關鍵字9.cpp
?????文件??????397810??2011-06-15?10:37??課程設計\數據結構課程設計報告格式.docx
- 上一篇:職工信息管理系統C 鏈表
- 下一篇:C++ primer 第三版習題答案
評論
共有 條評論