基本定义
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使得每个关键字key对应一个存储位置f(key)。这种对应关系f称为散列或哈希函数。采用上述思想将数据存储在一块连续的存储空间中,这块连续的存储空间称为散列或哈希表。关键字对应的存储位置称为散列地址。散列技术最适合的求解问题是查找与给定值相等的记录。
如果碰到两个不同的关键字key1≠key2key1≠key2,但却有相同的f(key1)=f(key2)f(key1)=f(key2),这种现象称为冲突,并把key1key1和key2key2 称为这个散列函数的同义词(synonym)。
散列函数:一个查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key) = Addr(这里的地址可以是数组下标、索引或内存地址等。)
散列表:根据关键字而直接进行访问的数据结构。简单来说,散列表建立了关键字和存储地址之间的一种直接映射关系。
创建开放定地法的散列表:
#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */
typedef int ElementType; /* 关键词类型用整型 */
typedef int Index; /* 散列地址类型 */
typedef Index Position; /* 数据所在位置与散列地址是同一类型 */
/* 散列单元状态类型,分别对应:有合法元素、空单元、有已删除元素 */
typedef enum { Legitimate, Empty, Deleted } EntryType;
typedef struct HashEntry Cell; /* 散列表单元类型 */
s