第13题用线性探查法实现的散列表 POWERBY KTL
2006-06-12 17:39
337 查看
/*设有一组关键字(许炼2,35,124,153,84,57),需要插入到表长为12的散列表中。
本程序把该题目编写为程序,输入72 35 124 153 84 57回车,输入查找的关键字,
因为输出为key,而不是other,所以若输出与你输入的关键字相同则程序运行正确。
*/
#include "stdio.h"
#include "stdlib.h"
#define p 11
#define M 12
#define N 6
#define nil 0
typedef int keytype;
typedef char datatype;
typedef struct
{
keytype key;
datatype other;
}hashtable;
hashtable HT[12];
int H(keytype k)
{
return k%p;
}
int Linsrch(hashtable HT[],keytype k)
{
int d,i=0;
d=H(k);
while((i<M)&&(HT[d].key!=k)&&(HT[d].key!=nil))
{
i++;
d=(d+i)%M;
}
return d;
}
void Linsert(hashtable *HT,hashtable *s)
{
int d;
d=Linsrch(HT,s->key);
if(HT[d].key==nil)
HT[d]=*s;
else printf("ERROR");
}
void Init(hashtable HT[],int m,keytype key[],int n)
{
int i;
for (i=0;i<m;i++)
{
HT[i].key=0;
}
for(i=0;i<n;i++)
{
hashtable s;
s.key=key[i];
Linsert(HT,&s);
}
}
int main()
{
int i,d;
keytype k;
keytype key
;
printf("请输入你的关键字序列:");
for(i=0;i<N;i++)
{
scanf("%d",&key[i]);
}
Init(HT,M,key,N);
printf("现在的散列表状态为:/n");
for(i=0;i<M;i++)
printf("%d ",HT[i].key);
printf("/n");
printf("请输入你要查找的关键字:");
scanf("%d",&k);
d=Linsrch(HT,k);
if(HT[d].key==k)
{
printf("%d /n",HT[d].key);
}
else{
printf("发生错误。。。/n");
}
return 0;
}
本程序把该题目编写为程序,输入72 35 124 153 84 57回车,输入查找的关键字,
因为输出为key,而不是other,所以若输出与你输入的关键字相同则程序运行正确。
*/
#include "stdio.h"
#include "stdlib.h"
#define p 11
#define M 12
#define N 6
#define nil 0
typedef int keytype;
typedef char datatype;
typedef struct
{
keytype key;
datatype other;
}hashtable;
hashtable HT[12];
int H(keytype k)
{
return k%p;
}
int Linsrch(hashtable HT[],keytype k)
{
int d,i=0;
d=H(k);
while((i<M)&&(HT[d].key!=k)&&(HT[d].key!=nil))
{
i++;
d=(d+i)%M;
}
return d;
}
void Linsert(hashtable *HT,hashtable *s)
{
int d;
d=Linsrch(HT,s->key);
if(HT[d].key==nil)
HT[d]=*s;
else printf("ERROR");
}
void Init(hashtable HT[],int m,keytype key[],int n)
{
int i;
for (i=0;i<m;i++)
{
HT[i].key=0;
}
for(i=0;i<n;i++)
{
hashtable s;
s.key=key[i];
Linsert(HT,&s);
}
}
int main()
{
int i,d;
keytype k;
keytype key
;
printf("请输入你的关键字序列:");
for(i=0;i<N;i++)
{
scanf("%d",&key[i]);
}
Init(HT,M,key,N);
printf("现在的散列表状态为:/n");
for(i=0;i<M;i++)
printf("%d ",HT[i].key);
printf("/n");
printf("请输入你要查找的关键字:");
scanf("%d",&k);
d=Linsrch(HT,k);
if(HT[d].key==k)
{
printf("%d /n",HT[d].key);
}
else{
printf("发生错误。。。/n");
}
return 0;
}
相关文章推荐
- 第十五题用拉链法实现散列表 POWERBY KTL
- 线性探查法实现的散列表(哈希表)类
- 散列(哈希)表的C++简单操作和实现(线性探查)
- 散列表(三)冲突处理的方法之开地址法: 线性探测再散列的实现
- Prim算法生成最小树 Powerby KTL
- 开放定址散列表(线性探测法(双散列))实现文件C语言
- 哈希之闭散列-线性算法和二次探查法
- 索引结构与散列技术 POWERBY CHenCHengNET
- 开放定址散列表(线性探测法)实现文件C语言
- 第十章第十六题 POWERBY KTL
- 二次探查再散列Hash表的C++实现
- [数据结构]散列表-链接法和开放寻址法 线性探查
- 详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)
- 散列表(三):冲突处理的方法之开地址法(线性探测再散列的实现)
- 再散列开放定址散列表(线性探测法)加强版可再散列经优化实现文件C语言
- 用开放地址法中的线性探查法解决冲突实现哈希表的运算
- 散列查找:C语言线性探查与拉链存储的实现
- 第九章第14题(赶出来的作业) POWERBY KTL
- 散列表(三):冲突处理的方法之开地址法(线性探测再散列的实现)
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)