我要用用C语言 的双向链表写一个航空系统,并且还要用到文件操作
时间: 2024-02-25 10:56:34 浏览: 173
好的,我可以帮你解答这个问题。双向链表是一种常用的数据结构,可以实现插入、删除、查找等操作,非常适合用于实现航空系统。同时,文件操作也是实现航空系统的必要手段,可以用来保存和读取航班信息等数据。
下面是一个用C语言实现双向链表的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义双向链表节点的结构体
typedef struct node {
int data;
struct node *prev;
struct node *next;
} Node;
// 初始化双向链表
Node *init_list() {
Node *head = (Node *)malloc(sizeof(Node));
head->prev = NULL;
head->next = NULL;
return head;
}
// 在双向链表尾部插入节点
void insert_node(Node *head, int data) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = data;
new_node->prev = head;
new_node->next = head->next;
if (head->next != NULL) {
head->next->prev = new_node;
}
head->next = new_node;
}
// 在双向链表中删除指定节点
void delete_node(Node *head, Node *node) {
if (node->prev != NULL) {
node->prev->next = node->next;
}
if (node->next != NULL) {
node->next->prev = node->prev;
}
free(node);
}
// 在双向链表中查找指定数值的节点
Node *find_node(Node *head, int data) {
Node *cur = head->next;
while (cur != NULL && cur->data != data) {
cur = cur->next;
}
return cur;
}
// 保存双向链表到文件
void save_list_to_file(Node *head, const char *filename) {
FILE *fp = fopen(filename, "wb");
if (fp != NULL) {
Node *cur = head->next;
while (cur != NULL) {
fwrite(cur, sizeof(Node), 1, fp);
cur = cur->next;
}
fclose(fp);
}
}
// 从文件中读取双向链表
Node *load_list_from_file(const char *filename) {
FILE *fp = fopen(filename, "rb");
if (fp != NULL) {
Node *head = init_list();
Node *cur = head;
Node *node = (Node *)malloc(sizeof(Node));
while (fread(node, sizeof(Node), 1, fp) == 1) {
cur->next = node;
node->prev = cur;
node->next = NULL;
cur = node;
node = (Node *)malloc(sizeof(Node));
}
free(node);
fclose(fp);
return head;
}
return NULL;
}
// 销毁双向链表
void destroy_list(Node *head) {
Node *cur = head->next;
while (cur != NULL) {
Node *node = cur;
cur = cur->next;
free(node);
}
free(head);
}
// 测试双向链表的函数
int main() {
Node *head = init_list();
insert_node(head, 1);
insert_node(head, 2);
insert_node(head, 3);
Node *node = find_node(head, 2);
if (node != NULL) {
delete_node(head, node);
}
save_list_to_file(head, "list.bin");
Node *new_head = load_list_from_file("list.bin");
destroy_list(new_head);
return 0;
}
```
在上面的代码中,我们首先定义了一个双向链表节点的结构体,包含数据、前驱节点和后继节点三个成员。然后,我们实现了一些双向链表的基本操作,包括初始化、插入、删除、查找等操作。最后,我们实现了文件操作函数,可以将双向链表保存到文件中,也可以从文件中读取双向链表。在测试函数中,我们使用了这些函数来对双向链表进行操作,并将结果保存到文件中。
如果你想要实现一个航空系统,可以根据需要修改上述代码,并在双向链表节点中添加航班信息等数据。同时,你还需要实现一些航空系统的功能,比如查询、预订、取消、修改航班等操作。这些操作可以通过调用双向链表的函数来实现。在使用文件操作时,你需要根据实际情况决定保存哪些数据到文件中,以及文件的格式和命名方式等。
阅读全文