如何在C语言中实现哈希表数据结构?

哈希表这个概念听上去很高大上,但其实我们可以用幽默的方式来解释它。想想看,哈希表就是一个比喻(不要拿我当真啊),它就像是一个饭店的预订系统,让我们来模拟一下。

在哈希表里,我们需要有一个存放客人姓名的数组,然后将客人的姓名和房间号进行对应。当客人预订饭店时,我们就把他们的姓名和房间号记录下来,这样当客人来饭店办理入住手续时,我们就可以快速查找到他们的房间号。

那我们怎么实现这个哈希表呢?喏,就让我带你体验一下通过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函数根据房间号查找客人信息,并输出查找结果。

这就是一个简单的哈希表的实现。当然,真正的哈希表要复杂得多,还涉及到哈希函数的设计、解决冲突的方法等等。不过通过这个简单的例子,希望你能对哈希表有一个初步的认识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值