帮我看看,我说不哪错了,主要是标记那里
程序代码:#include"stdio.h"
#include"stdlib.h"
#define defaultSize 11
typedef enum KindOfState
{
Active,
Blank,
Deleted
}KindOfState;
typedef int KeyType;
typedef struct{
KeyType key;
}HElemType;
typedef struct{
int divisor;//除数
int n,m;//已用地址数 ,最大地址数
HElemType *data;//散列表存储数组
KindOfState *state;//状态数组
int *cout;//探索次数数组
}HashTable;
void initHashTable(HashTable *HT,int d)
// d为不要大于m 但是接近于m的质数
{
int i=0;
HT->divisor=d;
HT->m=defaultSize;
HT->n=0;
HT->data=(HElemType*)malloc(HT->m*sizeof(HElemType));
HT->state=(KindOfState*)malloc(HT->m*sizeof(KindOfState));
HT->cout=(int*)malloc(HT->m*sizeof(int));
for(i=0;i<HT->m;i++)
{
HT->state[i]=Blank;
HT->cout[i]=0;
}
}
//可加入 LInearProde 文件
int FindPos(HashTable &HT,KeyType x,int &i,int &num)
{
i=x%HT.divisor;num=0;//num表示探索次数
if(HT.state[i]==Active&&HT.data[i].key==x)
{
num++;
return 1;
}
else
{
int j=i;
do{
num++;
if(HT.state[i]!=Active)
{
return 1;
}
else if(HT.state[i]!=Active)
{
return 0;//找到空位
}
i=(i+1)%HT.m;//向后探索 ,这种方式 能够最大程度的利用表
}while(j!=i);//i===j表满
i=-1;
return 0;
}
}
int Insert(HashTable &HT,HElemType elem)
{
int i,num,flag;
flag=FindPos(HT,elem.key,i,num);
if(flag)
{
printf("表中已有此元素,不能插入\n");
return 0;
}
else if(i==-1)
{
printf("表已满\n");
return 0;
}
HT.data[i]=elem;
HT.state[i]=Active;
HT.cout[i]=num;
HT.n++;
}
void CreatrHashTable(HashTable &HT,KeyType A[],int n)//这里(1)
{
int i;
HElemType Elem;
for(i=0;i<n;i++)
{
Elem.key=A[i];
Insert(HT,Elem);
}
}
void PrintfHashTable(HashTable&HT)
{
int i;
for(i=0;i<HT.m;i++)
if(HT.state[i]==Active)
printf("[%d]%d[%d]\n",i,HT.data[i].key,HT.cout[i]);
}
int main()
{
KeyType A[8]={37,25,14,36,48,68,57,11};
HashTable t;
initHashTable(&t,11);
CreatrHashTable(&t,A,8); //这里 (2)
return 0;
}






