资源简介
数据结构课程设计,用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语言源码
- 下一篇:动态生成多个按钮
相关资源
- 利用C++哈希表的方法实现电话号码查
- 课程设计-电话号码查找系统C语言版含
- C语言开放地址法哈希表构建
- c语言附录ASCII表、关键字、结合性、
- 数据结构哈希表实现通讯录
- 《数据结构》C语言版 实验报告 基础
- hashtable-C语言版折叠法+单链表
- TXT文本里关键字检索
- 哈希表操作c语言版
- 哈希表的设计与实现C语言
- Hash查找、二分查找c语言关键字个数
- 关键词检索 字符串检索
- 设计哈希表实现电话号码查询系统。
- 哈希表设计 针对某个集体比如你所在
- c语言关键字汇总
- Huffman 编码器与解码器-----数据结构课
- 设计一个测试程序比较几种内部排序
- C语言基于哈希表实现通讯录
- C语言32个关键字九种控制语句34种运算
- C语言的32个关键字、9种控制语句、
- C语言32个关键字九种控制语句34种运算
- C语言32个关键字九种控制语句34种运算
- 假设人名为中国人姓名的汉语拼音形
- 一个c++实现的哈希表类
- 数据结构 用哈希表做的通讯录
- 多关键字排序C语言
- C语言百科全书集合了c语言关键字分类
- 综合查找算法顺序查找、折半查找、
- 用哈希表创建通讯录,c语言版
- 哈希表实现通讯录
评论
共有 条评论