哈希表设计

这篇博客讲述了如何使用除留余数法和线性探测再散列法来构造哈希表。首先,通过这种方法处理20个人的姓名,接着实现查找、删除和插入操作。随后,利用姓名首字母的数值和除留余数法再次构建哈希表,并处理潜在的冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容
(1)、对于给定20个人的姓名,用除留余数法构造哈希函数,用线性探测再散列
法处理冲突,构造哈希表;
(2)、对于给定的一个姓名,在哈希表上进行查找,如果其存在则将其删除,否
则将其插入到该哈希表上。
(9)、不妨设字母(不分大小写)a~z对应于数值1~26,对于给定的20个姓名作为关键
字,将构成每个姓名的首字母对应的数值相加,然后按照除留余数法构造哈希函数,
并用线性探测再散列法处理冲突,完成哈希表的构造。

程序如下

#include <stdio.h>
#define MaxSize 100      //定义最大哈希表长度
#define NULLKEY -1       //定义空关键字值
#define DELKEY -2        //定义被删关键字值
typedef int KeyType;     //关键字类型
typedef char *InfoType;  //其他数据类型
typedef struct{
    KeyType key;        //关键字域
    InfoType data;      //其他数据域
    int count;          //探查次数域
}HashTable[MaxSize];    //哈希表类型
void InsertHT(HashTable ha,int &n,KeyType k,int p);
void CreateHT(HashTable ha,KeyType x[],int n,int m,int p);
int SearchHT(HashTable ha,int p,KeyType k);
int DeleteHT(HashTable ha,int p,int k,int &n);
void DispHT(HashTable ha,int n,int m);
int *fun(int *k);
int change(char y[10]);
void main()
{
    int x[20]={0};
 fun(x);
    int n=20,m=30,p=29,i,k;
 char k1[10];
    HashTable ha;
    CreateHT(ha,x,n,m,p);
    printf("\n");
    DispHT(ha,n,m);
 printf("请输入查找的姓名:");
  scanf("%s",&k1);
    k=change(k1);
    i=SearchHT(ha,p,k);
    if (i!=-1)
 {  
  printf(" 找到%d\n",k);
        printf(" 删除关键字\n");
        DeleteHT(ha,p,k,n);
 }
    else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值