简介:本文将带你了解哈希表的原理,并通过C语言实现一个简单的哈希表。我们将探讨哈希表的性能特性,以及如何优化哈希函数和解决哈希冲突。
哈希表是一种数据结构,它使用哈希函数将键映射到存储位置,从而实现快速的查找、插入和删除操作。哈希表在计算机科学中广泛应用于各种场景,如数据库、缓存系统、搜索引擎等。
一、哈希表的原理
哈希表的基本原理是将键通过哈希函数计算出一个唯一的地址,然后将值存储在该地址中。查找、插入和删除操作都可以通过计算键的哈希值来快速定位到相应的值。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define HASH_SIZE 101typedef struct {char *key;int value;} HashItem;HashItem *hashTable[HASH_SIZE];// 哈希函数:平方取中法unsigned int hash(char *key) {unsigned int hashValue = 0;int length = strlen(key);for (int i = 0; i < length; i++) {hashValue += (unsigned int)key[i];}hashValue = hashValue % HASH_SIZE;return hashValue;}// 向哈希表中插入一个元素void insert(char *key, int value) {unsigned int hashIndex = hash(key);HashItem *newItem = (HashItem*)malloc(sizeof(HashItem));newItem->key = strdup(key);newItem->value = value;hashTable[hashIndex] = newItem;}// 从哈希表中查找一个元素int get(char *key) {unsigned int hashIndex = hash(key);HashItem *currentItem = hashTable[hashIndex];while (currentItem != NULL) {if (strcmp(currentItem->key, key) == 0) {return currentItem->value;}currentItem = currentItem->next;}return -1; // 未找到元素,返回-1表示空值或无效值}