总程序实现了添加数据信息,建立开散列表,闭散列表,开散列和闭散列的查找,时间性能分析,还有溢出表的建立与查找这些功能。
下面分开说明原理:
开散列表:运用单链表存储方式,不产生堆积现象,但因为附加了指针域而增加了空间开销。
闭散列表:运用顺序表存储,存储效率较高,但容易产生堆积,查找不易实现,需要用到二次再查找。
溢出表:开、闭散列的结合运用,第一个顺序表存放类似指针域,第二个则存放溢出。
实现:
#include<iostream>
#include<cstdio>
#include<stdio.h>
#include<stdlib.h>
#define HashSize 53
#define MaxSize 20
using namespace std;
typedef struct
{
int key;
int si;
} HashTable1;
void CreateHashTable1(HashTable1 *H,int *a,int num)//哈希表线性探测在散列;
{
int i,d,cnt;
for(i=0; i<HashSize; i++)
{
H[i].key=0;
H[i].si=0;
}
for(i=0; i<num; i++)
{
cnt=1;
d=a[i]%HashSize;
if(H[d].key==0)
{
H[d].key=a[i];
H[d].si=cnt;
}
else
{
do
{
d=(d+1)%HashSize;
cnt++;
}
while(H[d].key!=0);
H[d].key=a[i];
H[d].si=cnt;
}
}
printf("\n线性再探索哈希表已建成!\n");
}
void SearchHash1(HashTable1 *h,int data)
{
int d;
d=data%HashSize;
if(h[d].key==data)
printf("数字%d的探查次数为