c语言用二叉树查找实现航班查询
时间: 2023-11-18 19:05:19 浏览: 97
好的,我可以帮你解答这个问题。
对于航班查询这个问题,我们可以将每一个航班信息存储在一个二叉树节点中,节点的左子树表示出发时间早于该航班的航班信息,右子树表示出发时间晚于该航班的航班信息。这样,我们就可以通过二叉树的查找操作来进行航班查询。
具体实现时,我们可以定义一个结构体来表示航班信息,包括航班号、起飞时间、到达时间、出发地、目的地等属性。然后,我们可以定义一个二叉树节点结构体,包括指向左右子树的指针和存储航班信息的指针。最后,我们可以定义一个根节点指针,在程序运行时动态创建二叉树并进行航班查询。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Flight {
char flight_no[10]; // 航班号
char departure_time[20]; // 起飞时间
char arrival_time[20]; // 到达时间
char departure_city[20]; // 出发城市
char arrival_city[20]; // 到达城市
} Flight;
typedef struct Node {
struct Node *left;
struct Node *right;
Flight *flight;
} Node;
Node *root = NULL;
Node *create_node(Flight *flight) {
Node *node = (Node *)malloc(sizeof(Node));
node->left = NULL;
node->right = NULL;
node->flight = flight;
return node;
}
void insert_node(Node **node, Flight *flight) {
if (*node == NULL) {
*node = create_node(flight);
return;
}
if (strcmp(flight->departure_time, (*node)->flight->departure_time) < 0) {
insert_node(&(*node)->left, flight);
} else {
insert_node(&(*node)->right, flight);
}
}
void search(Node *node, char *departure_city, char *arrival_city) {
if (node == NULL) {
return;
}
if (strcmp(node->flight->departure_city, departure_city) == 0 &&
strcmp(node->flight->arrival_city, arrival_city) == 0) {
printf("Flight No.: %s\n", node->flight->flight_no);
printf("Departure Time: %s\n", node->flight->departure_time);
printf("Arrival Time: %s\n", node->flight->arrival_time);
printf("Departure City: %s\n", node->flight->departure_city);
printf("Arrival City: %s\n", node->flight->arrival_city);
}
if (strcmp(departure_city, node->flight->departure_city) < 0) {
search(node->left, departure_city, arrival_city);
}
if (strcmp(arrival_city, node->flight->arrival_city) > 0) {
search(node->right, departure_city, arrival_city);
}
}
int main() {
Flight flights[] = {
{"CA1234", "2021-10-01 08:00:00", "2021-10-01 10:00:00", "Beijing", "Shanghai"},
{"MU5678", "2021-10-01 10:00:00", "2021-10-01 12:00:00", "Beijing", "Shanghai"},
{"CZ9101", "2021-10-01 13:00:00", "2021-10-01 15:00:00", "Shanghai", "Beijing"},
{"CA5678", "2021-10-01 16:00:00", "2021-10-01 18:00:00", "Shanghai", "Beijing"},
};
int len = sizeof(flights) / sizeof(flights[0]);
for (int i = 0; i < len; i++) {
insert_node(&root, &flights[i]);
}
search(root, "Beijing", "Shanghai");
search(root, "Shanghai", "Beijing");
return 0;
}
```
这个示例代码中,我们定义了一个 Flight 结构体来表示航班信息,一个 Node 结构体来表示二叉树节点,一个根节点指针 root,以及插入节点和查找节点的函数 insert_node 和 search。在 main 函数中,我们创建了一个包含四个航班信息的数组,然后动态创建二叉树并进行航班查询。
阅读全文