数据结构-哈希表

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.说明

空间换时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值