本文主要是介绍开放性地址处理法与冲突法处理哈希表的查找和插入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*用开放性地址处理冲突法定义的哈希表*/
#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;elsed = (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;}
}
这篇关于开放性地址处理法与冲突法处理哈希表的查找和插入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!