/*
*檔名稱:1.pp
*完成日期:2023年12月7日
*問題描述:用雜湊法組織關鍵字
*/
已知乙個關鍵字序列為if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool,共15個字串,雜湊函式h(key)為關鍵字的第乙個字母在字母表中的序號,雜湊表的表長為26。
(1)若處理衝突的方法採用線性探測法,請設計演算法,輸出每個關鍵字對應的h(key),輸出雜湊表,並求成功情況下的平均查詢長度。
#include #include #define n 15
#define m 26
int h(char *s)
int main()
; int i, j, k;
char ht[m][10];
int det[m]; //存放探測次數
for(i=0; i
執行結果:
(2)若處理衝突的方法採用鏈位址法,請設計演算法,輸出雜湊表,並計算成功情況和不成功情況下的平均查詢長度。
#include #include #include #define n 15
#define m 26
typedef struct node //定義雜湊鍊錶的節點型別
lnode;
typedef struct
httype;
int h(char *s) //實現雜湊函式
//構造雜湊表
void hash(char *s, httype ht)
}}//輸出雜湊表
void dispht(httype ht)
printf("\n");
}printf("---------------------\n");
}//求查詢成功情況下的平均查詢長度
double searchlength1(char *s, httype ht)
count+=k;
}return 1.0*count/n; //成功情況僅有n種
}//求查詢不成功情況下的平均查詢長度
double searchlength2(httype ht)
count+=k;
}return 1.0*count/m; //不成功時,在表長為m的每個位置上均可能發生
}int main()
; hash(s, ht);
dispht(ht);
printf("查詢成功情況下的平均查詢長度 %f\n", searchlength1(s, ht));
printf("查詢不成功情況下的平均查詢長度 %f\n", searchlength2(ht));
return 0;
}
執行結果:
第15周專案2 用雜湊法組織關鍵字
問題 檔名稱 專案2.cbp 作 者 張芸嘉 完成日期 2015年12月11日 版 本 號 v1.0 問題描述 已知乙個關鍵字序列為if while for case do break else struct union int double float char long bool,共15個字串,...
第15周專案2用雜湊法組織關鍵字
問題及 1 檔名稱 專案1.cpp 完成日期 2015.12.14 問題描述 已知乙個關鍵字序列為if while for case do break else struct union int double float char long bool,共15個字串,雜湊函式h key 為關鍵字的第乙...
第15周專案2 用雜湊法組織關鍵字
檔名稱 專案2.cbp 作 者 畢夢楠 完成日期 2015年12月14日 版 本 號 v1.0 問題描述 已知乙個關鍵字序列為if while for case do break else struct union int double float char long bool,共15個字串,雜湊函...