完了 写了主函数 又执行不了help
程序代码:/*
*哈希表 开放定址法
*/
#include<stdio.h>
#include<stdlib.h>
#define MinTableSize 10
typedef int ElemType;
enum KindOfEntry{Legitimate,Empty,Deleted};
typedef struct HashEntry
{
ElemType element;
enum KindOfEntry info;
}Cell;
/* Cell *TheCells will be an array of */
/* HashEntry cells, allocated later */
typedef struct HashTbl
{
int TableSize;
Cell *TheCells;
}*HashTable;
typedef int Index;
typedef Index Position;
/* Return next prime; assume N >= 10 */
int NextPrime(int N)
{
int i;
if(N%2==0)
N++;
for(;;N+=2)
{
for(i=3;i*i<=N;i+=2)
if(N%i==0)
return 0;
return N;
}
}
/*Hash function for ints*/
Index Hash(ElemType Key,int TableSize)
{
return Key%TableSize;
}
HashTable InitializeTable(int TableSize)
{
HashTable H;
int i;
if(TableSize<MinTableSize)
{
printf("Table size too small");
return NULL;
}
/*Allocate table*/
H=(HashTable)malloc(sizeof(struct HashTbl));
if(NULL==H)
printf("Out of space!!!\n");
H->TableSize=NextPrime(TableSize);
/*Allocate array of cells*/
H->TheCells=(Cell *)malloc(sizeof(Cell)*H->TableSize);
if(NULL==H->TheCells)
{
printf("Out of space!!!\n");
free(H);
}
for(i=0;i<H->TableSize;i++)
{
H->TheCells[i].info=Empty;
H->TheCells[i].element=0;
}
return H;
}
Position Find(ElemType Key,HashTable H)
{
Position CurrentPos;
int CollisionNum;
CollisionNum=0;
CurrentPos=Hash(Key,H->TableSize);
while( H->TheCells[ CurrentPos ].info != Empty &&
H->TheCells[ CurrentPos ].element != Key )/* Probably need strcmp!! */
{
CurrentPos+=2*++CollisionNum-1;
if(CurrentPos>=H->TableSize)
CurrentPos-=H->TableSize;
}
return CurrentPos;
}
void Insert(ElemType Key,HashTable H)
{
Position Pos;
Pos=Find(Key,H);
if(H->TheCells[Pos].info!=Legitimate)
{
H->TheCells[Pos].info=Legitimate;/*Ok to insert here*/
H->TheCells[Pos].element=Key;/*Probably need strcpy*/
}
}
HashTable ReHash(HashTable H)
{
int i,OldSize;
Cell *OldCells;
OldCells=H->TheCells;
OldSize=H->TableSize;
/*Get a new empty table*/
H=InitializeTable(2*OldSize);
/*Scan through old table reinserting into new*/
for(i=0;i<OldSize;i++)
if(OldCells[i].info==Legitimate)
Insert(OldCells[i].element,H);
free(OldCells);
return H;
}
void traverseHash(HashTable H,int len)
{
int i;
printf("哈希地址0~%d\n",len-1);
for(i=0;i<len;i++)
{
if(H->TheCells[i].info=Legitimate)//有数据
printf("address=%d value=%d\n",i,H->TheCells[i].element);
}
}
void DestroyTable(HashTable H)
{
free(H->TheCells);
free(H);
}
int main()
{
HashTable H;
int array[]={19,14,23,01,68,20,84,27,55,11,10,79};
int len=sizeof(array)/sizeof(array[0]);
int i;
// ElemType k;
H=InitializeTable(len);
for(i=0;i<len;i++)
{
Insert(array[i],H);
}
traverseHash(H,len);
printf("\n\n");
return 0;
}




我还以为你做出来了呢。晚上帮你看看~
