数据结构课程设计哈希表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告
课题四哈希表查找的设计
1. 任务和功能要求
设哈希表长为20,用除留余数法构造一个哈希函数,以开放定址法中的线性探测再散列法作为解决冲突的方法,编程实现哈希表查找、插入和建立算法。
2. 需求分析
用户输入20个以内的数字存储在哈希表中,并可以在表中查找关键字。3.概要设计
typedef struct
{
int *key; //关键字
int count; //表长
}HashTable;
int creat(HashTable *T) //初始化哈希表
程序调用关系如下:
主函数模块
哈希表初始化模块查询模块
插入模块
4. 详细设计
#include
#include
#include
#include
typedef struct
{
int *key; //关键字
int count; //表长
}HashTable;
int search(HashTable *T,int k) //初始化哈希表
{
int a;
a=k%13;
while(a<20)
{
if(T->key[a]==k) break;
a++;
}
if(a<20)
return a;
else
return 0;
}
void insert(HashTable *T,int k)
{
int i,j;
i=search(T,k);
if(i!=0)
printf(" 关键字已存在于位置%d",i); else
{
j=k%13;
while(j<20)
{
if(T->key[j]==0)
{
T->key[j]=k;break;
}
else j++;
}
}
}
int func(HashTable *T)
{
int a,k;
printf("______________________________________________________\n"); printf(" 查找\n\n"); printf("请输入关键字:");
scanf("%d",&k);
a=search(T,k);
if(a!=0)
printf(" \n关键字位置为%d\n",a);
else
printf(" \n未查找到关键字");
return 0;
printf("\n\n输入任意值返回");
getch();
system("cls");
}
int creat(HashTable *T)
{
int i,j,m,a;
T->key=(int *)malloc(20*sizeof(int));
for(m=0;m<20;m++)
T->key[m]=0;
printf("________________________________________________________\n"); printf("请输入关键字个数:");
scanf("%d",&i);
printf("\n请输入关键字:\n");
for(j=0;j
{
scanf("%d",&a);
insert(T,a);
T->count++;
}
return 0;
}
int main()
{
HashTable T;
creat(&T);
func(&T);
return 0;
}
5. 调试分析
1)在函数insert中,T->key[j]=k;后没有写break;使得插入第一个数会占满所有空间,无法再次插入。
6. 用户手册
1)演示程序的运行环境为Windows8.1系统,Microsoft Visual Studio 6.0中的Microsoft Visual C++ 6.0中运行。执行文件为:哈希表.exe
2)进入演示程序后即显示DOS形式的界面:
3)接受其他命令后即执行相应运算和显示相应结果。
7.测试结果
1)
2)输入12个关键字
3)查找关键字