上述算法是哈希表的基本操作,包括初始化哈希表、插入元素和查找元素。

初始化哈希表的函数将哈希表的每个元素都置为φ(空)。

插入元素的函数先通过哈希函数计算元素的哈希值,如果该位置为空,则直接将元素插入。如果该位置已经有元素,则通过线性探测(向后依次查找)找到空位置插入元素。

查找元素的函数先通过哈希函数计算元素的哈希值,如果该位置有元素且与目标元素的键值相同,则返回1(找到)。如果该位置为空,则返回0(未找到)。如果该位置不为空但元素的键值与目标元素的键值不同,则通过线性探测找到相同的键值或空位置,然后判断是否找到目标元素。

完整主函数程序源代码如下:

#include <stdio.h> #define HTMax 100 // 哈希表长度

typedef struct { int key; // 键值 // 其他数据项 } ElemType;

typedef struct { ElemType data; } HashTable;

int Hash(int key) { // 哈希函数 return key % HTMax; }

void InitHash(HashTable HT[]) { int i; for (i=0; i<HTMax; i++) HT[i].data.key = 0; // 空标记为0 }

void InsertHash(HashTable HT[], ElemType x) { int i = Hash(x.key); if (HT[i].data.key == 0) HT[i].data = x; else if (HT[i].data.key != 0) { i = (i + 1) % HTMax; while (HT[i].data.key != 0) i = (i + 1) % HTMax; HT[i].data = x; } }

int SearchHash(HashTable HT[], int key) { int i = Hash(key); if (HT[i].data.key == key) return 1; else if (HT[i].data.key != 0) { i = (i + 1) % HTMax; while (HT[i].data.key != key && HT[i].data.key != 0) i = (i + 1) % HTMax; if (HT[i].data.key == key) return 1; else return 0; } else return 0; }

int main() { HashTable HT[HTMax]; InitHash(HT); ElemType x; x.key = 123; InsertHash(HT, x); printf("%d\n", SearchHash(HT, 123)); printf("%d\n", SearchHash(HT, 456)); return 0;

void InitHashHashTable HT for i=0; i HTMax; i++ HTi  φ; 插入算法 void InsertHash HashTable HT ElemType x i  Hash xkey ; if HTikey = φ HTi  x; else if HTikey ≠ φ i  i + 1 mod HTMax; HTMax

原文地址: https://www.cveoy.top/t/topic/eJVC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录