#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define m 20 <哈希表长度>
#define NULLKEY -1 <空记录的关键字值>
typedef int KeyType;
typedef struct{
KeyType key;
}RecordType;
typedef struct{
RecordType *elem;//表示生成的空间的首地址
int count; //哈希表元素个数
//int sizeindex; //哈希表长度
}HashTable[m];
//typedef RecordType HashTable[m];
//创建哈希表
void CreatHash(HashTable *H){
int i,key,p,q,j;
printf("输入元素:\n");
for(i=0;i<H->count;i++){
j=1;
scanf("%d",&key);
p=key%H->sizeindex;
if(H->elem[p].key==NULLKEY)
H->elem[p].key=key;
else{
q=p;
while(H->elem[p].key!=NULLKEY){
p=(q+j)%H->sizeindex;
j++;
}
H->elem[p].key=key;
}
}
}
void InitHash(HashTable *H){
int i;
printf("输入哈希表的元素个数:\n");
scanf("%d",&H->count);
H->elem=(KeyType *)malloc(H->sizeindex * sizeof(KeyType)); //申请内存
for(i=0;i<H->sizeindex;i++)
H->elem[i].key=NULLKEY;
}
void print(HashTable H){
int i=0;
for(i=0;i<H.sizeindex;i++){
printf("%d ",H.elem[i].key);
}
}
int HashSearch(HashTable ht,KeyType K){
hO = hash(K);
if(ht[h0].key == NULLKEY){
return -1;
}else if(ht[h0].key == K){
return (h0);
}else{/*线性探测再散列*/
for(i = 1 ; i <= (ht.sizeindex-1) ; i++){
hi = (h0 + i) % m;
if(ht[hi].key == NULLKEY){
return -1;
}else if(ht[hi].key == K){
return hi;
}
}
return -1;
}
}
int main(int argc, char *argv[]) {
HashTable ht;
InitHash(ht);
return 0;
}
【无标题】
最新推荐文章于 2024-09-28 22:05:59 发布