小甲鱼数据结构课程的改良版:
//散列表(哈希表)的创建、初始化、插入与查找
#include<stdlib.h>
#include<iostream>
using namespace std;
#define HASHSIZE 13
#define NULLKEY -32456 //哈希表初始化的值
//定义哈希表结构
typedef struct
{
int *elem; //数据元素的基址,动态分配数组
int count; //当前数据元素的个数
}HashTable;
//哈希表初始化
int InitHashTable(HashTable *H)
{
H->count = HASHSIZE;
H->elem = (int *)malloc(HASHSIZE * sizeof(int));
if (!H->elem)
{
return -1;
}
for (int i = 0; i < HASHSIZE; i++)
{
H->elem[i] = NULLKEY;
}
return 0;
}
//采用的散列函数——除留余数法
int HashFunction(int key, int p)
{
return(key % p); //p <= HASHSIZE,质数
}
//插入关键字到哈希表
void InsertHashTable(HashTable *H, int key)
{
int addr;
addr = HashFunction(key, HASHSIZE);
//int faddr;
//faddr = addr;
//int i = 1;
while (H->elem[addr] != NULLKEY)
{
addr = HashFunction((addr + 1), HASHSIZE); //处理散列冲突的方法:开放定址法—线性探索
//相当于
/*
addr =