资源简介
数据结构课程设计,用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冲突关键字
- 上一篇:上传的p2p技术C语言源码
- 下一篇:动态生成多个按钮
评论
共有 条评论