哈希表又称散列表,是根据关键值而直接进行访问的数据结构。哈希表的实现主要是散列函数和解决冲突。散列函数有:直接寻址法、数字分析法、平法取中法、折叠发、随机数法、除留余数法(严蔚敏版数据结构)。处理冲突的方法有:分离链接法(separate chaining)又称链地址法、开放寻址法、再散列法、建立公共溢出区。本文主要将的是分离链接法的实现。散列函数用的是除留余数法。
编码及测试环境:Visual Studio 2010
fatal.h处理错误的宏定义
#include <stdio.h>
#include <stdlib.h>
#define FatalError(str) fprintf(stderr, "%s\n", str),exit(1)
hashsep.h操作函数的声明
typedef int ElementType;
typedef unsigned int Index;
#ifndef HASHSEQ_H
#define HASHSEQ_H
struct Node
{
ElementType Element;
struct Node *Next;
};
typedef struct Node *Position;
struct HashTbl
{
int TableSize;//表的大小
Position *TheLists;//存放指针的数组,二级指针
};
typedef struct HashTbl *HashTable;
HashTable InitializeTable();//创建hash表
void Insert(ElementType Key, HashTable H);//插入关键字
Position Fi