数据结构课程设计哈希表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)查找关键字

相关文档
最新文档