/*用开放性地址处理冲突法定义的哈希表*/
#define M 997
typedef 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 997
typedef 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;
}
}