东华大学数据结构哈希表查找的设计Word文档下载推荐.docx

上传人:b****3 文档编号:16449081 上传时间:2022-11-23 格式:DOCX 页数:11 大小:75.51KB
下载 相关 举报
东华大学数据结构哈希表查找的设计Word文档下载推荐.docx_第1页
第1页 / 共11页
东华大学数据结构哈希表查找的设计Word文档下载推荐.docx_第2页
第2页 / 共11页
东华大学数据结构哈希表查找的设计Word文档下载推荐.docx_第3页
第3页 / 共11页
东华大学数据结构哈希表查找的设计Word文档下载推荐.docx_第4页
第4页 / 共11页
东华大学数据结构哈希表查找的设计Word文档下载推荐.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

东华大学数据结构哈希表查找的设计Word文档下载推荐.docx

《东华大学数据结构哈希表查找的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《东华大学数据结构哈希表查找的设计Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。

东华大学数据结构哈希表查找的设计Word文档下载推荐.docx

typedefstruct

{

intkey;

}Elemtype;

2、定义哈希表元素:

typedefstruct

{

Elemtypeelem;

//存储域

inttag;

//标识部分

}HashItem;

3、哈希表:

HashItemtable[TableSize];

intcount;

//当前哈希表存储量

}HashTable;

4、程序调用关系:

1、插入函数:

intInsert(HashTable*h,Elemtypex,intp)

调用Search函数

判断i的取值,进行有关插入的操作。

main()2、查找函数:

intSearch(HashTableh,Elemtypex,intp)

通过除留余数法以及线性探测再散列法进行查找。

通过结构体中标识元素“tag”判断存储元素有无。

3、结束程序

6、详细设计:

#include<

stdio.h>

conio.h>

malloc.h>

#defineTableSize20//哈希表长20,可变。

#defineSUCCESS1

#defineUNSUCCESS0

#defineDUPLICATE-1

//哈希表存储元素

//哈希表元素

//哈希表

voidsurface()//用户界面显示程序,增加程序可读性

inti;

for(i=0;

i<

=25;

i++)printf("

*"

);

printf("

数据结构课程设计"

\n"

=5;

=20;

"

课题四哈希表查找设计"

=75;

}

intInitiate(HashTable*h)

{//哈希表初始化

i<

TableSize;

i++)

(*h).table[i].tag=0;

(*h).table[i].elem.key=NULL;

}

(*h).count=0;

returnSUCCESS;

}//初始化为空表。

{//查找元素操作

inti=x.key%p;

//除留余数法定哈希地址,p对应主函数的divider

intj=i;

while(h.table[j].tag==1&

&

h.table[j].elem.key!

=x.key)//已有元素且非所查找元素

j=(j+1)%TableSize;

//线性探测再散列

if(j==i)//全表遍历

{

printf("

哈希表中未找到%d\n"

x.key);

returnTableSize;

//未搜索到所给元素,返回表长

}

if(h.table[j].tag==1)//元素已存在

该元素在哈希表的第%d位\n"

j);

return-j;

//返回位置的负数下标

else//元素不存在

哈希表中未查找到%d\n"

returnj;

//返回其位置的下标

{//插入元素操作

inti=Search(*h,x,p);

//利用查找操作返回相关值,取值规则详见上方注释

if(i<

0)//元素已存在

{printf("

元素已存在,无法再插入,操作失败!

returnUNSUCCESS;

else

if(i!

=TableSize&

(*h).table[i].tag!

=1)//哈希表有剩余空间时,进行插入操作

{

(*h).table[i].elem.key=x.key;

//插入元素

(*h).table[i].tag=1;

//“元素存储”为真

(*h).count++;

//存储量加1

printf("

成功插入!

returnSUCCESS;

else

if(i==TableSize)//哈希表已满时,插入失败

{

printf("

哈希表已满,无法再插入,操作失败!

returnUNSUCCESS;

}

intmain()

{

inti,n;

charc;

//选择变量

HashTableh;

//哈希表h

intdivider;

//除留余数法的除数

Initiate(&

h);

//初始化哈希表(空表)

surface();

//运行界面

请输入一个小于20的质数作为除数:

scanf("

%d"

&

divider);

while

(1)

1、录入元素\n2、查找指定元素在表中的位置\n"

3、输入其他:

退出\n"

请输入相关功能的选择序号:

getchar();

scanf("

%c"

c);

switch(c)

case'

1'

:

{printf("

请输入需要输入的元素个数n(n<

=20):

"

n);

Elemtype*pi;

pi=(Elemtype*)malloc(n*sizeof(Elemtype));

//根据元素个数分配地址

请[依次]输入%d个元素的值:

n);

for(i=0;

n;

i++)

{

scanf("

pi[i].key);

Insert(&

h,pi[i],divider);

//插入

}

已返回主界面,请重新选择:

break;

}

case'

2'

请输入需要查找的元素的值:

Elemtypea;

//所需查找的元素

a.key);

Search(h,a,divider);

//查找

break;

default:

return0;

getch();

7、调试分析:

a.定义常量(表长):

TableSize=20,使得程序便于修改。

b.HashItem引入标识部分“tag”,表明存储情况。

C.初步调试时,进行插入元素步骤后,出现主函数直接结束的情况,由此问题相应地增加了循环结构。

8、用户手册:

1)运行环境:

win7,Microsoftvisualc++6.0

2)初步运行界面:

3)插入时候必须元素个数和表长的关系,如果超过表长则需要重新修改程序

9、测试结果(附截图):

测试数据:

哈希函数:

H(key)=key%13

关键字组:

{19,01,23,14,55,20,84,27,68,11,10,77}

1)输入除数(divider)=13

2)输入元素个数:

12

3)依次输入190123145520842768111077

并用空格键隔开

4)插入成功后显示:

5)查找元素:

(示例1:

20)

6)查找元素:

(示例2:

29)

7)结束程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1