某学校的图书管理系统中,书本种类信息包括:书号、书名、价格三项属性,且书的种类数不超过20。编写C语言程序代码,用链式存储方式实现该图书管理系统数据结构的构建,并至少能够进行初始化、清空、增加、删除、查找操作。
时间: 2024-10-16 11:22:01 浏览: 23
在C语言中,我们可以使用结构体和动态内存分配来创建一个简单的链表数据结构来管理图书系统。这里是一个基本的设计:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图书结构体
typedef struct Book {
int book_id;
char title[50];
float price;
struct Book* next; // 链接指针
} Book;
// 初始化链表
void initialize(Book** head) {
*head = (Book*)malloc(sizeof(Book));
if (*head == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
(*head)->book_id = -1;
(*head)->title[0] = '\0';
(*head)->price = 0.0;
(*head)->next = NULL;
}
// 清空链表
void clear(Book* head) {
Book* current = head;
while (current != NULL) {
Book* temp = current;
current = current->next;
free(temp);
}
head = NULL;
}
// 添加新书
void addBook(Book** head, int id, char* title, float price) {
Book* newNode = (Book*)malloc(sizeof(Book));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->book_id = id;
strcpy(newNode->title, title);
newNode->price = price;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
Book* last = *head;
while (last->next != NULL)
last = last->next;
last->next = newNode;
}
}
// 删除书籍
void deleteBook(Book** head, int id) {
Book* current = *head;
Book* prev = NULL;
if (current && current->book_id == id) {
*head = current->next;
free(current);
return;
}
while (current != NULL && current->book_id != id) {
prev = current;
current = current->next;
}
if (current == NULL)
return;
prev->next = current->next;
free(current);
}
// 查找书籍
Book* searchBook(Book* head, int id) {
Book* current = head;
while (current != NULL) {
if (current->book_id == id)
return current;
current = current->next;
}
return NULL;
}
int main() {
Book* bookList = NULL;
// 初始化链表
initialize(&bookList);
// ...其他操作...
return 0;
}
```
这个程序定义了一个名为`Book`的链表节点结构,包含书本的基本信息。初始化函数用于创建链表头部,清空函数用于释放所有节点的内存,添加函数用于在链表末尾添加新书,删除函数用于移除指定ID的书籍,搜索函数则返回具有给定ID的书籍节点。
你可以在这个基础上添加更多的功能,比如遍历、修改书籍信息等。注意,为了保持代码简洁,这里的示例只实现了核心功能。实际应用中,你可能需要处理更多边界情况和错误检查。
阅读全文