哈希表这个概念听上去很高大上,但其实我们可以用幽默的方式来解释它。想想看,哈希表就是一个比喻(不要拿我当真啊),它就像是一个饭店的预订系统,让我们来模拟一下。
在哈希表里,我们需要有一个存放客人姓名的数组,然后将客人的姓名和房间号进行对应。当客人预订饭店时,我们就把他们的姓名和房间号记录下来,这样当客人来饭店办理入住手续时,我们就可以快速查找到他们的房间号。
那我们怎么实现这个哈希表呢?喏,就让我带你体验一下通过C语言来实现哈希表的乐趣吧。
首先,我们需要创建一个哈希表结构体,来表示我们的饭店预订系统:
#include <stdio.h>
#include <string.h>
#define TABLE_SIZE 10
typedef struct {
char name[20];
int roomNumber;
} Guest;
typedef struct {
Guest guests[TABLE_SIZE];
} HotelReservationSystem;
void initHotelReservationSystem(HotelReservationSystem* system) {
memset(system->guests, 0, sizeof(system->guests));
}
void addGuest(HotelReservationSystem* system, const char* name, int roomNumber) {
int index = roomNumber % TABLE_SIZE;
Guest newGuest;
strcpy(newGuest.name, name);
newGuest.roomNumber = roomNumber;
system->guests[index] = newGuest;
}
Guest* findGuest(HotelReservationSystem* system, int roomNumber) {
int index = roomNumber % TABLE_SIZE;
return &(system->guests[index]);
}
int main() {
HotelReservationSystem reservationSystem;
initHotelReservationSystem(&reservationSystem);
addGuest(&reservationSystem, "Alice", 101);
addGuest(&reservationSystem, "Bob", 203);
addGuest(&reservationSystem, "Charlie", 305);
Guest* foundGuest = findGuest(&reservationSystem, 203);
if (foundGuest != NULL) {
printf("Guest found: %s, Room number: %d\n", foundGuest->name, foundGuest->roomNumber);
} else {
printf("Guest not found.\n");
}
return 0;
}
在这段代码中,我们定义了一个结构体Guest,它用来表示每个预订客人的姓名和房间号。然后,我们定义了另一个结构体HotelReservationSystem,它里面包含了一个Guest类型的数组,用来存放客人信息。
接着,我们实现了几个函数。initHotelReservationSystem函数用于初始化饭店预订系统,将预订客人数组中的所有元素初始化为0。addGuest函数用于向饭店预订系统中添加客人信息,根据房间号计算出客人在数组中的索引,并将客人信息存储在相应的位置上。findGuest函数用于根据房间号查找客人信息,同样根据房间号计算出客人在数组中的索引,并返回相应位置上的客人信息。
在主函数中,我们首先初始化饭店预订系统,然后使用addGuest函数添加了几个客人的信息,最后使用findGuest函数根据房间号查找客人信息,并输出查找结果。
这就是一个简单的哈希表的实现。当然,真正的哈希表要复杂得多,还涉及到哈希函数的设计、解决冲突的方法等等。不过通过这个简单的例子,希望你能对哈希表有一个初步的认识。