第十四周项目二——用希尔法组织关键字

来源:互联网 发布:centos 6.8安装cacti 编辑:程序博客网 时间:2024/06/18 12:20

#include <string.h>  #include <stdio.h> #include <iostream>#define N 15  #define M 26  int H(char *s){return ((*s - 'a' + 1) % M);}int main(){char *s[N] = { "if", "while", "for", "case", "do", "break", "else", "struct", "union", "int", "double", "float", "char", "long", "bool" };int i, j, k;char HT[M][10];int Det[M];   //存放探测次数  for (i = 0; i<M; i++){HT[i][0] = '\0';Det[i] = 0;}printf("字符串 key\tH(key)\n");printf("------------------------\n");for (i = 0; i<N; i++){j = H(s[i]);  //求哈希值  printf("%s\t\t%d\n", s[i], j);k = 0;   //探测次数初值  while (1){k++;    //累加探测次数  if (HT[j][0] == '\0')   //当不冲突时,直接放到该处  {strcpy(HT[j], s[i]);break;}else    //冲突时,采用线性探查法求下一个地址  {j = (j + 1) % M;}}Det[j] = k;}printf("---------------------\n");printf("哈希表\n");printf("位置\t字符串\t探查次数\n");printf("---------------------\n");for (i = 0; i<M; i++)printf("%d\t%s\t%d\n", i, HT[i], Det[i]);printf("---------------------\n");k = 0;for (i = 0; i<M; i++)k += Det[i];printf("查找成功情况下的平均查找长度 %f\n", 1.0*k / N);system("pause");return 0;}


程序运行截图:



原创粉丝点击