c语言双向链表实现图书管理系统
时间: 2023-07-13 18:37:36 浏览: 118
C语言链表实现图书管理系统
好的,我可以为您提供一个简单的 C 语言双向链表示例,用于实现图书管理系统。
首先,您需要定义一个图书结构体,它将包含书籍的信息,如书名、作者、出版社、出版日期等等。例如:
```c
struct Book {
char title[100];
char author[50];
char publisher[50];
int year;
};
```
接下来,定义一个节点结构体,它将包含一个指向前一个节点和后一个节点的指针,以及一个 Book 结构体指针。例如:
```c
struct Node {
struct Book* book;
struct Node* prev;
struct Node* next;
};
```
然后,定义一个双向链表结构体,它将包含一个指向链表头和尾的指针。例如:
```c
struct LinkedList {
struct Node* head;
struct Node* tail;
};
```
接下来,实现添加节点、删除节点、遍历链表等函数。例如:
```c
// 添加节点
void add_node(struct LinkedList* list, struct Book* book) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->book = book;
node->prev = list->tail;
node->next = NULL;
if (list->tail == NULL) {
list->head = node;
} else {
list->tail->next = node;
}
list->tail = node;
}
// 删除节点
void delete_node(struct LinkedList* list, struct Node* node) {
if (node == list->head) {
list->head = node->next;
} else {
node->prev->next = node->next;
}
if (node == list->tail) {
list->tail = node->prev;
} else {
node->next->prev = node->prev;
}
free(node);
}
// 遍历链表
void traverse_list(struct LinkedList* list) {
struct Node* node = list->head;
while (node != NULL) {
printf("%s, %s, %s, %d\n", node->book->title, node->book->author, node->book->publisher, node->book->year);
node = node->next;
}
}
```
最后,您可以在主函数中调用这些函数,实现图书管理系统的添加、删除和遍历功能。例如:
```c
int main() {
struct LinkedList list = { NULL, NULL };
struct Book book1 = { "The Great Gatsby", "F. Scott Fitzgerald", "Scribner", 1925 };
struct Book book2 = { "To Kill a Mockingbird", "Harper Lee", "J. B. Lippincott & Co.", 1960 };
add_node(&list, &book1);
add_node(&list, &book2);
traverse_list(&list);
delete_node(&list, list.head);
traverse_list(&list);
return 0;
}
```
这是一个简单的 C 语言双向链表示例,可以用于实现图书管理系统。
阅读全文