基于链式存储结构的图书表的创建,新书入库,旧书出库,定义图书表的输出函数,编写main函数
时间: 2024-10-16 22:10:40 浏览: 23
在使用链式存储结构(如单链表)创建图书表时,我们需要设计一个图书节点的数据结构,然后定义相关的操作函数。这里是一个简单的示例,我们将创建一个包含图书ID、标题和库存量的图书节点。新书入库、旧书出库以及打印图书表的函数也会被定义。
首先,定义一个`Book`结构体:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图书节点结构
typedef struct Book {
int id;
char title[50];
int stock;
struct Book* next; // 指向下一个节点的指针
} Book;
// 新书入库函数
void add_book(Book** head, int id, const char* title, int stock) {
Book* new_book = (Book*)malloc(sizeof(Book));
if (new_book == NULL) {
printf("Memory allocation failed.\n");
return;
}
new_book->id = id;
strcpy(new_book->title, title);
new_book->stock = stock;
new_book->next = *head;
*head = new_book;
}
// 出库函数,假设每次出库减少库存
void remove_book(Book** head, int id, int stock) {
Book* current = *head;
while (current != NULL) {
if (current->id == id && current->stock >= stock) {
current->stock -= stock;
if (current->stock <= 0) {
Book* temp = current;
current = current->next;
free(temp);
} else {
break;
}
} else {
current = current->next;
}
}
}
// 打印图书表函数
void print_books(Book* head) {
Book* current = head;
while (current != NULL) {
printf("ID: %d, Title: %s, Stock: %d\n", current->id, current->title, current->stock);
current = current->next;
}
}
// 主函数
int main() {
// 初始化图书表头指针
Book* book_list = NULL;
// 新书入库示例
add_book(&book_list, 1, "The Catcher in the Rye", 10);
// 假设出库一本书
remove_book(&book_list, 1, 5);
// 打印当前图书表
print_books(book_list);
return 0;
}
```
在这个例子中,我们首先初始化了一个空的链表,然后添加了一本书。接着演示了如何根据ID和库存量减少书籍数量。最后,调用`print_books`函数显示当前的图书列表。
阅读全文