問題:
/*
* 檔名稱:專案2.cbp
* 作 者:張芸嘉
* 完成日期:2023年12月11日
* 版 本 號:v1.0
* 問題描述:
已知乙個關鍵字序列為if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool,
共15個字串,雜湊函式h(key)為關鍵字的第乙個字母在字母表中的序號,雜湊表的表長為26。
(1)若處理衝突的方法採用線性探測法,請設計演算法,輸出每個關鍵字對應的h(key),輸出雜湊表,並求成功情況下的平均查詢長度。
(2)若處理衝突的方法採用鏈位址法,請設計演算法,輸出雜湊表,並計算成功情況和不成功情況下的平均查詢長度。
* 輸入描述:無
* 程式輸出:測試資料
*/
**:1.線性探測法
#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 用雜湊法組織關鍵字
檔名稱 1.pp 完成日期 2015年12月7日 問題描述 用雜湊法組織關鍵字 已知乙個關鍵字序列為if while for case do break else struct union int double float char long bool,共15個字串,雜湊函式h key 為關鍵字的第...
第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個字串,雜湊函...