资源简介

数据结构课程设计,用C语言写的 一、任务描述 扫描一个C源程序,用Hash表存储该程序中出现的关键字,并统计该程序中的关键字出现的度。用线性探测法解决Hash冲突。设Hash函数为:Hash(Key)=[(Key的首字母序号)*100+(Key的尾字母序号)] Mod 41。关键字39个,参考C语言教材。 二、数据结构设计 ①关键字表的存储结构;②Hash表中的结点结构。频度、冲突次数 三、功能设计 ①从一个大字符串中分解单词 ②识别是否是关键词;用哪种方法:有序表查找、二叉查找树? ③Hash函数,解决冲突,统计冲突次数。key => 地址 ④插入Hash表,或调整Hash表项中的频度 ⑤输出Hash表,关键词总数,冲突次数

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

#define TOTAL 39               //39个关键字
#define MAXLEN 10              //关键字长度
#define HASHLEN 41             //哈希表长度

typedef struct             //哈希表 结构体   
{
char keyword[MAXLEN];     //关键字
int count;             //记录频度
int con;               //记录冲突次数
}HASH;

//全局变量
int cont=0;               //统计关键词个数
char KeyWords[TOTAL][MAXLEN]={“asm““auto““break““case““cdecl““char“
                               “const““continue““default““do““double“
   “else““enum““extern““far““float““for“
   “goto““huge““if““int““interrupt““long“
   “near““pascal““register““return““short“
   “signed““sizeof““static““struct““switch“
   “typedef““union““unsigned““void““volatile“
                               “while“};                //C语言中的39个关键字存入二维数组中
HASH HS[HASHLEN];      //建立结构体HS

//函数声明
void Show(int key);
int Read(char *filename); 
int isLetter(char ch);
int isKeyWords(char *word);
int FindHX(char *keyword);
int CreatHX(char *keyword);
int GetFreePos(int key);
int GetKey(char *keyword);

void main()
{
    char orz;
    int flag=1icountkeyhas;
char filename[128]word[MAXLEN];
    while(flag)
{
      printf(“\t\tA.读取一个文件\n“);
    printf(“\t\tB.输出Hash表(关键字总数,冲突次数)\n“);
    printf(“\t\tC.查询某关键字在Hash表中的情况\n“);
    printf(“\t\tD.显示Hash表中的冲突关键字\n“);
    printf(“\t\tE.显示C语言关键字的Hash函数值(作为对照)\n“);
    printf(“\t\tF.退出\n\n“);
printf(“\t\t请输入序号(A--F):“);
        scanf(“%c“&orz);
switch(orz)
{
    case ‘a‘:
case ‘A‘:
system(“cls“);                         //清屏函数
                printf(“请输入要读取的文件名(文件必须与程序在同一目录下):“);    //比如输入:a.cpp
scanf(“%s“&filename);
Read(filename);
    printf(“\n按任意键返回...“);
    getch();
    system(“cls“);
break;
    case ‘b‘:
case ‘B‘:
getchar();
system(“cls“);
printf(“每次显示5行,请按回车键继续!\n“);
for(i=0;i {
       Show(i); 
    if((i+1)%5==0)
getchar();  //为了清晰,每次显示5行
}
    printf(“关键字总数为: %d\n“cont);
    printf(“\n按任意键返回...“);
    getch();
    system(“cls“);
    break;
    case ‘c‘:
case ‘C‘:
system(“cls“);
printf(“请输入你想要查找的关键字: “);
    scanf(“%s“&word);
    printf(“\n“);
    Show(FindHX(word));
printf(“\n按任意键返回...“);
    getch();
    system(“cls“);
    break;
    case ‘d‘:
case ‘D‘:
system(“cls“);
    printf(“\t冲突关键字列表\n\n“);
    count=0;
    for(i=0;i {
    if(strlen(HS[i].keyword)>0)
{
    key=GetKey(HS[i].keyword);
    if(key!=i)
{
    count++;
    printf(“\t关键字:%s“HS[i].keyword);
    printf(“\t哈希表当前位置:%d“i);
    printf(“\t冲突次数:%d\n“HS[i].con);
}
}
}
    if(count==0) 
    printf(“没有冲突\n“);
    else
          printf(“\n\t\t\t冲突关键字

评论

共有 条评论