C语言哈希法查找航班信息并输出
时间: 2023-07-11 13:19:31 浏览: 216
哈希法是一种常用的快速查找算法,适用于大量数据的查找。下面是一个使用哈希法查找航班信息并输出的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 哈希表的大小
#define HASH_SIZE 100
// 航班信息结构体
struct flight {
char flight_no[10]; // 航班号
char from_city[20]; // 出发城市
char to_city[20]; // 到达城市
char departure_time[6]; // 出发时间
char arrival_time[6]; // 到达时间
};
// 哈希表节点结构体
struct hash_node {
struct flight f; // 航班信息
struct hash_node *next; // 下一个节点
};
// 哈希表结构体
struct hash_table {
struct hash_node *nodes[HASH_SIZE]; // 哈希表节点数组
};
// 哈希函数,根据航班号计算哈希值
int hash_func(char flight_no[]) {
int sum = 0;
for (int i = 0; i < strlen(flight_no); i++) {
sum += flight_no[i];
}
return sum % HASH_SIZE;
}
// 初始化哈希表
void init_hash_table(struct hash_table *ht) {
for (int i = 0; i < HASH_SIZE; i++) {
ht->nodes[i] = NULL;
}
}
// 往哈希表中插入一条航班信息
void insert(struct flight f, struct hash_table *ht) {
// 计算哈希值
int index = hash_func(f.flight_no);
// 创建新节点
struct hash_node *new_node = (struct hash_node *)malloc(sizeof(struct hash_node));
new_node->f = f;
new_node->next = NULL;
// 插入节点到链表头部
new_node->next = ht->nodes[index];
ht->nodes[index] = new_node;
}
// 根据航班号查找航班信息
void search(char flight_no[], struct hash_table *ht) {
// 计算哈希值
int index = hash_func(flight_no);
// 遍历链表查找航班信息
struct hash_node *p = ht->nodes[index];
while (p != NULL) {
if (strcmp(p->f.flight_no, flight_no) == 0) {
printf("航班号:%s\n", p->f.flight_no);
printf("出发城市:%s\n", p->f.from_city);
printf("到达城市:%s\n", p->f.to_city);
printf("出发时间:%s\n", p->f.departure_time);
printf("到达时间:%s\n", p->f.arrival_time);
return;
}
p = p->next;
}
printf("未找到航班信息\n");
}
int main() {
// 初始化哈希表
struct hash_table ht;
init_hash_table(&ht);
// 插入航班信息
struct flight f1 = {"MU1234", "上海", "北京", "08:00", "11:00"};
struct flight f2 = {"CA5678", "北京", "上海", "09:00", "12:00"};
struct flight f3 = {"CZ9012", "广州", "深圳", "10:00", "11:00"};
insert(f1, &ht);
insert(f2, &ht);
insert(f3, &ht);
// 查找航班信息
search("MU1234", &ht);
search("CA5678", &ht);
search("CZ9012", &ht);
search("MU5678", &ht);
return 0;
}
```
以上代码中,我们首先定义了航班信息结构体`flight`和哈希表节点结构体`hash_node`,然后定义了哈希表结构体`hash_table`。在主函数中,我们先初始化哈希表,然后往哈希表中插入三条航班信息,最后通过航班号查找航班信息并输出。在插入航班信息时,我们使用哈希函数计算航班号的哈希值,并将航班信息插入到哈希表对应的链表头部。在查找航班信息时,我们先计算航班号的哈希值,然后遍历哈希表对应的链表,查找航班信息。如果找到了对应的航班信息,就输出航班信息;否则输出未找到航班信息。
阅读全文