哈希表设计实验报告.docx

上传人:b****5 文档编号:5797575 上传时间:2023-01-01 格式:DOCX 页数:9 大小:38.62KB
下载 相关 举报
哈希表设计实验报告.docx_第1页
第1页 / 共9页
哈希表设计实验报告.docx_第2页
第2页 / 共9页
哈希表设计实验报告.docx_第3页
第3页 / 共9页
哈希表设计实验报告.docx_第4页
第4页 / 共9页
哈希表设计实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

哈希表设计实验报告.docx

《哈希表设计实验报告.docx》由会员分享,可在线阅读,更多相关《哈希表设计实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

哈希表设计实验报告.docx

哈希表设计实验报告

哈希表设计实验报告

//头文件main.c

#include

#include

structkeyNum*hash[100];

structkeyNum*insertHash(structkeyNum*,int);//关键字插入链表

intsearchHash(structkeyNum*,intm);//查找链表中是否存在值为m的整数

voidprint(structkeyNum*);//打印链表

structkeyNum

{

intkey;//关键字

structkeyNum*next;

};

voidmain()

{

inti,k,m,n,num,flag,l,j;

inta[]={280,700,603,430,641,907,640};

structkeyNum*head=NULL;

num=sizeof(a)/sizeof(int);

for(i=0;i

{

k=a[i];

m=k%(num+1);//计算得到关键字的哈希值

hash[m]=insertHash(hash[m],k);//将关键字k插入到哈希值为m的链表中

}

printf("采用链地址法得到的哈希表为:

\n");

for(i=0;i

{

printf("第%d行:

",i);

print(hash[i]);

printf("\n");

}

printf("请输入要查找的整数值:

\n");

scanf("%d",&n);

for(i=0;i

{

l=searchHash(hash[i],n);

if(l==1)

{

j=i;

break;

}

}

if(l==1)printf("整数值%d在哈希表中,位置为链表%d\n",n,j);

}

structkeyNum*insertHash(structkeyNum*head,intm)

{

structkeyNum*p0,*p1,*p2,*temp;

temp=(structkeyNum*)malloc(sizeof(structkeyNum));

temp->key=m;

p1=head;

p0=temp;//要插入的节点(值为m);

if(head==NULL)//1,原来的链表为空,插入到head后

{

head=p0;

p0->next=NULL;

}

else//原来的链表不为空

{

while((p0->key>p1->key)&&(p1->next!

=NULL))//移动到适当位置

{

p2=p1;

p1=p1->next;

}

if(p0->key<=p1->key)

{

if(head==p1)head=p0;//2,插入到第一个节点之前

elsep2->next=p0;//3,插入到p2指向的节点之后

p0->next=p1;

}

else//4,插入到结尾处

{

p1->next=p0;

p0->next=NULL;

}

}

return(head);

}

intsearchHash(structkeyNum*head,intm)//查找链表head中是否存在m

{

intk=0;

structkeyNum*p;

p=head;

if(head!

=NULL)

do

{

if(p->key==m)//存在m

{

k=1;

break;

}

p=p->next;

}while(p!

=NULL);

return(k);//存在m值则返回1,否则返回0;

}

voidprint(structkeyNum*head)//打印链表head

{

structkeyNum*p;

p=head;

if(head!

=NULL)

{

do

{

printf("->%d",p->key);

p=p->next;

}while(p!

=NULL);

}

else

printf("null");

}

 

头文件HashTable.h

typedefstructKeyNum

{

intkey;

structKeyNum*next;

}keyNum;

//插入

keyNum*insertHash(keyNum*head,intm)

{

keyNum*p0,*p1,*p2,*temp;

temp=(keyNum*)malloc(sizeof(keyNum));

temp->key=m;

p1=head;

p0=temp;//要插入的节点(值为m);

if(head==NULL)//1,原来的链表为空,插入到head后

{

head=p0;

p0->next=NULL;

}

else//原来的链表不为空

{

while((p0->key>p1->key)&&(p1->next!

=NULL))//移动到适当位置

{

p2=p1;

p1=p1->next;

}

if(p0->key<=p1->key)

{

if(head==p1)head=p0;//2,插入到第一个节点之前

elsep2->next=p0;//3,插入到p2指向的节点之后

p0->next=p1;

}

else//4,插入到结尾处

{

p1->next=p0;

p0->next=NULL;

}

}

return(head);

}

//查找

intsearchHash(keyNum*head,intm)//查找链表head中是否存在m

{

intk=0;

keyNum*p;

p=head;

if(head!

=NULL)

do

{

if(p->key==m)//存在m

{

k=1;

break;

}

p=p->next;

}while(p!

=NULL);

return(k);//存在m值则返回1,否则返回0;

}

voidprint(keyNum*head)//打印链表head

{

keyNum*p;

p=head;

if(head!

=NULL)

{

do

{

printf("->%d",p->key);

p=p->next;

}while(p!

=NULL);

}

else

printf("null");

}

测试程序Main.c

#include

#include

#definemSize100//数组最大个数

#include"HashTable.h"

voidmain()

{

inti,k,m,n,num,l,j;

inta[]={180,750,600,430,541,900,640};

keyNum*hash[mSize];

keyNum*head=NULL;

num=sizeof(a)/sizeof(int);

for(i=0;i

hash[i]=NULL;

for(i=0;i

{

k=a[i];

m=k%(num+1);//计算得到关键字的哈希值

hash[m]=insertHash(hash[m],k);//将关键字k插入到哈希值为m的链表中

}

printf("当前哈希表如下:

\n");

for(i=0;i

{

printf("第%d行:

",i);

print(hash[i]);

printf("\n");

}

printf("\n");

printf("请输入要查找的元素:

\n");

scanf("%d",&n);

for(i=0;i

{

l=searchHash(hash[i],n);

if(l==1)

{

j=i;

break;

}

}

if(l==1)printf("\n整数值%d在哈希表中,位置为链表%d\n",n,j);

elseprintf("\n整数值%d不在哈希表中!

\n");

}

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

当前位置:首页 > 考试认证 > 交规考试

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

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