第十五周專案2 用雜湊法組織關鍵字

2021-07-25 16:34:30 字數 2960 閱讀 8137

[cpp]view plain

copy

/* * 檔名稱:專案2.cpp 

* 作    者:泮春宇

* 完成日期:2023年12月28日 

* 版 本 號: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)若處理衝突的方法採用鏈位址法,請設計演算法,輸出雜湊表,並計算成功情況和不成功情況下的平均查詢長度。

*輸入描述:無 

*程式輸出:測試資料 */

若處理衝突的方法採用線性探測法:

[cpp]view plain

copy

#include 

#include 

#define n 15  

#define m 26  

inth(

char

*s)    

intmain()    

;    

inti, j, k;    

char

ht[m][10];    

intdet[m];   

//存放探測次數  

for(i=0; i

printf("字串 key\th(key)\n"

);    

printf("------------------------\n"

);    

for(i=0; i

else

//衝突時,採用線性探查法求下乙個位址  

}    

det[j]=k;    

}    

printf("---------------------\n"

);    

printf("雜湊表\n"

);    

printf("位置\t字串\t探查次數\n"

);    

printf("---------------------\n"

);    

for(i=0; i

printf("%d\t%s\t%d\n"

, i, ht[i], det[i]);    

printf("---------------------\n"

);    

k=0;    

for(i=0; i

k+=det[i];    

printf("查詢成功情況下的平均查詢長度 %f\n"

, 1.0*k/n);    

return

0;    

}  

運算結果:

若處理衝突的方法採用鏈位址法:

[cpp]view plain

copy

"font-size:12px;"

>#include 

#include 

#include 

#define n 15

#define m 26

typedef

struct

node   

//定義雜湊鍊錶的節點型別

lnode;  

typedef

struct

httype;  

inth(

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;  }

運算結果:

知識點總結:

用雜湊法組織關鍵字。

學習心得:

採用兩種方法設計演算法輸出雜湊表,還需好好琢磨琢磨。

第十五周 專案2用雜湊法組織關鍵字

all right reserved.檔名稱 houzhui.cpp 作 者 商文軻 完成日期 2015年11月30日 版 本 號 v1.9 問題描述 已知乙個關鍵字序列為if while for case do break else struct union int double float ch...

第十五周專案2 用雜湊法組織關鍵字

檔名稱 main.cpp 完成日期 2015.12.7 版本號 v1.0 問題描述 已知乙個關鍵字序列為if while for case do break else struct union int double float char long bool,共15個字串,雜湊函式h key 為關鍵字...

第十五周 專案2 用雜湊法組織關鍵字

檔名稱 main.cpp,btree.h,btree.cpp 完成日期 2015年11月5日 版本號 code block 12.11 問題描述 已知乙個關鍵字序列為if while for case do break else struct union int double float char ...