DC04PE15 假设哈希表长为m,哈希函数为H(x),用链地址法处理冲突。试编写输入一组关键字并建造哈希表的算法。

本文介绍了链地址哈希表数据结构的实现,包括哈希函数、冲突处理以及BuildHashTab和Search函数的代码。这些函数用于构建和查找哈希表中的键值对。
摘要由CSDN通过智能技术生成

哈希表的类型ChainHashTab定义如下∶

#define NUM             7

#define NULLKEY    -1
#define SUCCESS   1
#define UNSUCCESS 0
#define DUPLICATE  -1
typedef char HKeyType;
typedef struct HNode {
HKeyType data;

struct HNode* next;

}*HLink;

typedef struct {
HLink *rcd;//指针存储基址,动态分配数组
int count; // 当前表中含有的记录个数

int size; // 哈希表的当前容量

}ChainHashTab;//链地址哈希表
/*以下函数可以直接调用*/
int Hash(ChainHashTab H,HKeyType k){  //哈希函数
return k %H.size;

}
Status Collision(ChainHashTab H,HLink &p){
//求得下一个探查地址p

if (p && p->next){
p= p->next;

return SUCCESS;
} else return UNSUCCESS;
}
实现下列函数∶
int BuildHashTab(ChainHashTab &H,int n,HKeyType es[ ]);/* 下列函数可以直按调用

/*哈希函数∶*/
/*int Hash(ChainHashTab H,HKeyType k); */
/*冲突处理函数∶ */
/*int Collision(ChainHashTab H,HLink &p); */
 

#include "allinclude.h"  //DO NOT edit this line

HLink Search(ChainHashTab &H, int i, HKeyType h)
{
  int num=Hash(H,h);
  HLink t;
   t=(HLink)malloc(sizeof(HLink));
  for(t=H.rcd[num];t!=NULL;t=t->next)
  if(t->data==h) return t;
  
  return NULL;
  
}
int BuildHashTab(ChainHashTab &H, int n, HKeyType es[])
{  // Add your code here
   int i;

   H.rcd = (HLink*)malloc(H.size * sizeof(HLink));//初始化
    H.count = 0;
    for (i = 0; i < H.size; i++)
    {
        H.rcd[i] = NULL;
    }

    int num;
    HLink p;
    HLink t;
    HKeyType h;
    
    for(i=0;i<n;i++)
    {
        p=(HLink)malloc(sizeof(HLink));
        
        num=Hash(H,es[i]);
        p->data=es[i];
        h=es[i];
        if(Search(H,i,h)==NULL)
        {
 p->next=H.rcd[num];//插入
           H.rcd[num]=p;
           H.count++;
        }
          
         
        }
        
        
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值