/*
1、哈希表的地址链表法
*/
//哈希表的地址链表法
/* 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,
它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,
存放记录的数组叫做散列表。 */
//HashTable.h
#include "stdafx.h"
#include "LinkList.h"
#include <stdio.h>
int main()
{
HashTable H;
InitHashTable(&H);
for(int i = 0;i < MAXSIZE * 2;i += 2)
InsertHashTable(&H,i);
printf("请输入要查找的内容:\n");
int key;
scanf("%d",&key);
if(SearchHashTable(&H,key))
printf("在哈希表中找到关键字:%d\n",key);
else
printf("在哈希表中未找到关键字:%d\n",key);
return 0;
}
///
//method.cpp
#include "stdafx.h"
#include "HashTable.h"
#include <stdio.h>
#include <stdlib.h>
void InitHashTable(HashTable *H) //初始化哈希表
{
H->count = MAXSIZE; //初始化哈希表的大小
H->table = (Node *)malloc(sizeof(Node) * H->count); //创建哈希表
for(int i = 0;i < H->count;++i) //初始化哈希表的数据
{
H->table[i].data = NULLKEY;
H->table[i].next = NULL;
}
}
int Hash(int key) //哈希表函数
{
return key % MAXSIZE;
}
void InsertHashTable(HashTable *H,int key) //将关键字key插入哈希表
{
int addr = Hash(key);
if(H->table[addr].data != key && H->table[addr].data != NULLKEY) //如果为真,创建单链表
{
Node *temp = (Node *)malloc(sizeof(Node));
temp->next = H->table[addr].next;
temp->data = key;
H->table[addr].next = temp;
}
else if(H->table[addr].data == NULLKEY) //则否直接填入
H->table[addr].data = key;
}
bool SearchHashTable(HashTable *H,int key) //查找关键字key的值
{
int addr = Hash(key);
if(H->table[addr].data == key)
return true;
Node *p = H->table[addr].next;
while(p != NULL) //查找单链表
{
if(p->data == key)
return true;
else
p = p->next;
}
return false;
}
///
//main.cpp
#include "stdafx.h"
#include "HashTable.h"
#include <stdio.h>
int main()
{
HashTable H;
InitHashTable(&H);
for(int i = 0;i < MAXSIZE * 2;i += 2)
InsertHashTable(&H,i);
printf("请输入要查找的内容:\n");
int key;
scanf("%d",&key);
if(SearchHashTable(&H,key))
printf("在哈希表中找到关键字:%d\n",key);
else
printf("在哈希表中未找到关键字:%d\n",key);
return 0;
}
哈希表集锦
最新推荐文章于 2024-08-31 10:45:38 发布