基于线性表的图书系统链表,给出代码,C语言
时间: 2024-11-04 09:19:15 浏览: 24
基于线性表的图书管理系统可以使用链表数据结构来存储图书信息,这里是一个简单的C语言实现,包括创建节点、添加书籍、删除书籍以及打印列表等操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Book {
char title[50];
int author;
float price;
struct Book* next; // 指向下一个节点的指针
} Book;
// 创建新的书籍节点
Book* create_book(char* title, int author, float price) {
Book* new_book = (Book*)malloc(sizeof(Book));
strcpy(new_book->title, title);
new_book->author = author;
new_book->price = price;
new_book->next = NULL;
return new_book;
}
// 添加书籍到链表末尾
void add_book(Book** head, char* title, int author, float price) {
Book* new_book = create_book(title, author, price);
if (*head == NULL) {
*head = new_book;
} else {
Book* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_book;
}
}
// 删除指定标题的书籍
void delete_book(Book** head, char* title) {
if (*head == NULL) return;
if ((*head)->title[0] == '\0') { // 检查是否为空链表
*head = (*head)->next;
free(*head); // 清理头节点
return;
}
Book* prev = *head;
Book* curr = *head->next;
while (curr != NULL && strcmp(curr->title, title) != 0) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) return; // 未找到要删除的书
prev->next = curr->next; // 移除当前节点
free(curr); // 释放内存
}
// 打印链表中的所有书籍
void print_books(Book* head) {
Book* temp = head;
while (temp != NULL) {
printf("书名:%s, 作者:%d, 价格:%f\n", temp->title, temp->author, temp->price);
temp = temp->next;
}
}
int main() {
Book* book_list = NULL;
// 添加书籍示例
add_book(&book_list, "哈利·波特", 7, 39.99);
add_book(&book_list, "百年孤独", 4, 59.99);
// 打印书籍示例
print_books(book_list);
// 删除一本书示例
delete_book(&book_list, "百年孤独");
// 再次打印确认删除
print_books(book_list);
return 0;
}
```
在这个示例中,我们首先定义了链表节点结构`Book`,然后实现了一些基本操作:创建新书、添加书、删除书和打印列表。在`main`函数里展示了完整的流程。
阅读全文