开放性地址处理法与冲突法处理哈希表的查找和插入

来源:互联网 发布:cf玫瑰精灵数据 编辑:程序博客网 时间:2024/04/30 17:05

 

 

/*用开放性地址处理冲突法定义的哈希表*/#define  M  997typedef   struct{    KeyType   key;DataType  data;}NodeType;typedef  NodeType   HashTable[M];-----------------------------------------------------------------/*用除余法设计哈希函数*/ int  h(KeyType  K, int m){    return   K%m;}---------------------------------------------------------------------- /*线性表查探法查找关键字*/int   HashSearch1(HashTa)ble  HT, int  K, int m){    int   d,temp;d = h(K,m);temp = d;while(HT[d].key != -32768){   if(HT[d].key == K)       return d;   else       d = (d+1)%m;   if(d == temp)       return -1;}return  d;}------------------------------------------------------------------- /*在哈希表上插入一个节点*/int  HashInsert1(HashTable  HT, NodeType  s, int m){    int d;d = HashSearch1(s.key, m);if(d = -1)    return -1;                         //哈希表已满;else{    if(s.key == HT[d].key)    return 0;else{    HT[d] = s;return 1;}}}--------------------------------------------------------------------
/*用拉链法定义哈希表*/#define  M  997typedef  struct  node{KeyType  key;DataType data;struct node *next;}HTNode;typedef  HTNode  *HT[M];----------------------------------------------------------------------/*查找关键字k*/HTNode*   HashSearch2(HT  T, KeyType  K, int m){   HTNode  *p = T[h(K,m)];   while(p != NULL  && p->key  != K)       p = p->next;   return  p;}/*插入结点s*/int    HashInsert2(HT  T, HTNode  *s, int m){    int  d;HTNode  *p = HashSearch2(T,s->key, m);if(p == NULL)    return 0;else{d = h(s->key, m);    s->next = T[d];    T[d] = s;    return 1;}}