在用除余法作为散列函数、线性探测解决冲突的散列表中,写一删除关键字的算法,要求将所有可以前移的元素前移去填充被删除的空位,以保证探测序列不至于断裂。
#include <stdio.h>
#include <stdlib.h>
#define m 29
#define SUCCESS 1
#define UNSUCCESS 0
#define DUPLICATE -1
typedef int Status;
typedef struct
{
int H[m];
int num;
}HashTable;
int Hash(int k);
void Collision(int *p,int c);
Status SearchHash(HashTable T,int k,int *p,int *c);
Status InsertHash(HashTable *T,int e);
Status DeleteKey(HashTable *T,int e);
int AdjustTable(HashTable *T,int k);
int main()
{
HashTable T;
int i;
for(i=0;i<m;i++)
T.H[i]=-1;
T.num=0;
int e;
printf("Input the numbers to create the HashTable:");
scanf("%d",&e);
while(e)
{
InsertHash(&T,e);
printf("Input the numbers to create the HashTable--0 to quit:");
scanf("%d",&e);
}
printf("Input the numbers you want to delete from the HashTable:");
sc