1.代码
#include<stdio.h>
#include<malloc.h>
#define TABLE_SIZE 19
/**
*<key,value>pair.
*/
typedef struct Node{
int key;
char value;
}Node,*NodePtr;
/**
*<key,value>pair
*/
typedef struct HashList{
int length;
NodePtr elements;
}HashList,*ListPtr;
/**
*Initialize a data a array.
*/
ListPtr initList(int *paraKeys,char *paraValues,int paraLength){
int i,tempPosition;
ListPtr resultPtr=(ListPtr)malloc(sizeof(struct HashList));
resultPtr->length=paraLength;
resultPtr->elements=(NodePtr)malloc(TABLE_SIZE*sizeof(struct Node));
for(i=0;i<TABLE_SIZE;i++){
resultPtr->elements[i].key=-1;
resultPtr->elements[i].value='x';
}
for(i=0;i<paraLength;i++){
tempPosition=paraKeys[i]%TABLE_SIZE;
while(resultPtr->elements[tempPosition].key!=-1){
tempPosition=(tempPosition+1)%TABLE_SIZE;
printf("Collision,move forward for key %d.\r\n",paraKeys[i]);
}
resultPtr->elements[tempPosition].key=paraKeys[i];
resultPtr->elements[tempPosition].value=paraValues[i];
}
return resultPtr;
}
/**
*Hash search.
*
*@param paraKey The given key.
*@param The content of the key.
*/
char hashSearch(ListPtr paraPtr,int paraKey){
int tempPosition=paraKey%TABLE_SIZE;
while(paraPtr->elements[tempPosition].key!=-1){
if(paraPtr->elements[tempPosition].key==paraKey){
return paraPtr->elements[tempPosition].value;
}
tempPosition=(tempPosition+1)%TABLE_SIZE;
}
return 'x';
}
void hashSearchTest(){
int tempUnstoredKeys[]={16,33,38,69,57,95,86};
char tempContents[]={'h','e','l','o','w','r','d'};
ListPtr tempPtr=initList(tempUnstoredKeys,tempContents,7);
printf("Search result of 95 is:%c\r\n",hashSearch(tempPtr,95));
printf("Search result of 38 is:%c\r\n",hashSearch(tempPtr,38));
printf("Search result of 57 is:%c\r\n",hashSearch(tempPtr,57));
printf("Search result of 4 is:%c\r\n",hashSearch(tempPtr,4));
}
/**
*The entrance of the program.
*/
int main(){
hashSearchTest();
return 1;
}
2.运行结果
Collision,move forward for key 57.
Collision,move forward for key 95.
Collision,move forward for key 95.
Search result of 95 is:r
Search result of 38 is:l
Search result of 57 is:w
Search result of 4 is:x
3.说明
空间换时间