数据结构实验9哈希查找
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3----4-----
查找
*");
插入
*");
printf("\n\t* printf("\n\t*
5----0-----
删除
*");
退出
*");
printf("\n\t**************************************");
printf("\n\n\t
请输入菜单号: ");
在哈希表中插入元素 在哈希表中删除元素
int Hash(int);
//
void main()
哈希函数
{ HashTable H;
//
char ch,j='y';
声明哈希表 H
int position,n,k;
Record R;
BOOL temp;
InitialHash(H);
while(j!='n')
scanf(" %c",&ch);
//
switch(ch)
输入操作选项
{
case '1':printf("\n 卑微如蝼蚁、坚强似大象
请输入元素个数 (<10): ");
共享知识 分享快乐 scanf("%d",&n);
printf("\n");
for( k=0;k<n;k++)
{ printf("
请输入第 %3d个整数 : ",k+1);
scanf("%d",&R.keynum); //
输入要插入的记录
temp=InsertHash(H,R);
};
break;
case '2':if(H.count)
//
哈希表不空
PrintHash(H);
else
printf("\n
散列表为空表 !\n");
//
输入要删除记录的关键字
temp=DeleteHash(H,R);
// temp=True:
记录删除成功; temp=False: 待删记录不存在
if(temp)
printf("\n 删除成功 !\n");
3、实验要求 ( 1) 分析算法思想 ,利用 C(C++)语言完成程序设计。
( 2) 上机调试通过实验程序。 ( 3) 输入数据,进行哈希插入和查找。 ( 4) 给出具体的算法分析,包括时间复杂度和空间复杂度等。 ( 5) 撰写实验报告。
4、实验步骤与源程序
⑴ 实验步骤 本程序共设计了五个函数来实现建表,显示,查找,插入,删除这几个主要功能,然后设计主
//
哈希表已满
{ printf("\n break; }
散列表已经满 !\n");
printf("\n
请输入要插入元素 (int):");
scanf("%d",&R.keynum);
//
卑微如蝼蚁、坚强似大象
输入要插入的记录
共享知识 分享快乐 temp=InsertHash(H,R);
// temp=True:
共享知识 分享快乐
1、实验目的
( 1) 复习顺序查找、二分查找、分块查找的基本算法及适用场合; ( 2) 掌握哈希查找的基本方法及适用场合,并能在解决实际问题时灵活应用; ( 3) 巩固在散列查找时解决冲突的方法及特点。
2、实验内容
( 1) 哈希表查找的实现(用线性探测法解决冲突) ; ( 2) 能对哈希表进行插入和查找。
函数,串接程序,并进行调试,测试实验结果。
⑵ 源代码 #include <dos.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 12
//
enum BOOL{False,True};
// temp=True:
记录查找成功; temp=False: 没有找到待查记录
if(temp)
printf("\n
查找成功该元素位置是 %d\n",position);
else
printf("\n }
本散列表没有该元素 !\n");
break;
case '4':if(H.count==MAXSIZE)
{
printf("\n\t
哈希 查找
");
printf("\n\t**************************************");
printf("\n\t*
1-----
建表
*");
printf("\n\t*
2-----
显示
*");
printf("\n\t* printf("\n\t*
break;
case '3':if(!H.count)
printf("\n
散列表为空表 !\n");
//
else
哈希表空
{ printf("\n
请你输入要查找元素 (int) :");
scanf("%d",&R.keynum);
//
输入待查记录的关键字
temp=SearchHash(H,R.keynum,position);
//
已被删除
数据元素体 元素状态标志,没有记录、有记录、有过记录但
int count;
//
}HashTable;
哈希表中当前元素的个数
typedef struct
卑微如蝼蚁、坚强似大象
共享知识 分享快乐
{ int keynum;
//
}Record;
记录的数据域,只有关键字一项
void InitialHash(HashTable&);
//
初始化哈希表
void PrintHash(HashTable);
//
BOOL SearchHash(HashTable,int,int&); //
显示哈希表中的所有元素 在哈希表中查找元素
BOOL InsertHash(HashTable&,Record); // BOOL DeleteHash(HashTable&,Record); //
记录插入成功; temp=False: 已存在关键字相同的记录
if(temp)
printf("\n 元素插入成功 !\n");
else
printf("\n 元素插入失败,相同元素本散列表已经存在 !\n");
break;
case '5':printf("\n
请你输入 要删除元素 (int):");
scanf("%d",&R.keynum);
哈希表的最大容量,与所采用的哈希函数有关
enumHAVEORNOT{NULLKEY,HAVEKEY,DELKEY}; 哈// 希表元素的三种状态,没有记录、有记录、有过 记录但已被删除
typedef struct
//
定义哈希表的结构
{ int elem[MAXSIZE];
//ቤተ መጻሕፍቲ ባይዱ
HAVEORNOT elemflag[MAXSIZE];