2015年大二上-数据结构-查找-2-(2)-用哈希法组织关键字

来源:互联网 发布:炒股必备软件 编辑:程序博客网 时间:2024/06/01 10:13
/*  *Copyright (c) 2014,烟台大学计算机学院  *All rights reserved.  *文件名称:Annpion.cpp  *作者:王耀鹏  *完成日期:2016年3月9日  *版本号:v1.0  *  *问题描述:用哈希法组织关键字   *输入描述:字符串  *输出描述:用哈希法组织关键字   */    #include <stdio.h>#include <string.h>#define N 15#define M 26int 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;   //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);        if(HT[j][0]=='\0')        {            strcpy(HT[j],s[i]);            Det[j]=1;        }        else        {            k=1;            do            {                ++k;                j=(j+1)%M;            }            while(HT[j][0]!='\0');            strcpy(HT[j],s[i]);            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);    return 0;}

运行结果:



0 0
原创粉丝点击