C语言实现散列表(哈希Hash表)实例详解

2025-05-27 0 45

C语言实现散列表(哈希Hash表)

实例代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114
//散列表查找算法(Hash)

#include <stdio.h>

#include <stdlib.h>

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define SUCCESS 1

#define UNSUCCESS 0

#define HASHSIZE 7

#define NULLKEY -32768

typedef int Status;

typedef struct

{

int *elem; //基址

int count; //当前数据元素个数

}HashTable;

int m=0; // 散列表表长

/*初始化*/

Status Init(HashTable *hashTable)

{

int i;

m=HASHSIZE;

hashTable->elem = (int *)malloc(m * sizeof(int)); //申请内存

hashTable->count=m;

for (i=0;i<m;i++)

{

hashTable->elem[i]=NULLKEY;

}

return OK;

}

/*哈希函数(除留余数法)*/

int Hash(int data)

{

return data % m;

}

/*插入*/

void Insert(HashTable *hashTable,int data)

{

int hashAddress=Hash(data); //求哈希地址

//发生冲突

while(hashTable->elem[hashAddress]!=NULLKEY)

{

//利用开放定址的线性探测法解决冲突

hashAddress=(++hashAddress)%m;

}

//插入值

hashTable->elem[hashAddress]=data;

}

/*查找*/

int Search(HashTable *hashTable,int data)

{

int hashAddress=Hash(data); //求哈希地址

//发生冲突

while(hashTable->elem[hashAddress]!=data)

{

//利用开放定址的线性探测法解决冲突

hashAddress=(++hashAddress)%m;

if (hashTable->elem[hashAddress]==NULLKEY||hashAddress==Hash(data)) return -1;

}

//查找成功

return hashAddress;

}

/*打印结果*/

void Display(HashTable *hashTable)

{

int i;

printf("\\n//==============================//\\n");

for (i=0;i<hashTable->count;i++)

{

printf("%d ",hashTable->elem[i]);

}

printf("\\n//==============================//\\n");

}

int main()

{

int i,j,result;

HashTable hashTable;

int arr[HASHSIZE]={13,29,27,28,26,30,38};

printf("***************Hash哈希算法***************\\n");

//初始化哈希表

Init(&hashTable);

//插入数据

for (i=0;i<HASHSIZE;i++)

{

Insert(&hashTable,arr[i]);

}

Display(&hashTable);

//查找数据

result= Search(&hashTable,29);

if (result==-1)

printf("对不起,没有找到!\\n");

else

printf("29在哈希表中的位置是:%d\\n",result);

return 0;

}

实现:

C语言实现散列表(哈希Hash表)实例详解

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C语言实现散列表(哈希Hash表)实例详解 https://www.kuaiidc.com/73846.html

相关文章

发表评论
暂无评论