包含5本书的信息的表格,并使用单链表储存和操作这些图书信息,用C语言编译
时间: 2024-09-12 20:02:39 浏览: 40
C语言期末大作业-图书信息管理系统(C语言,单链表)
在C语言中,我们可以创建一个结构体表示书籍,然后使用单链表来存储这些书的信息。首先,我们需要定义一个`Book`结构,包含书名、作者等字段。接着,我们设计一个节点结构`BookNode`,它包含一个`Book`实例以及指向下一个节点的指针。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义书籍结构
typedef struct Book {
char title[100];
char author[100];
int year;
} Book;
// 定义链表节点
typedef struct BookNode {
Book book_info;
struct BookNode* next;
} BookNode;
// 创建新节点
BookNode* createNewBook(BookNode** head, const char* title, const char* author, int year) {
BookNode* newNode = (BookNode*)malloc(sizeof(BookNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->book_info.title = strdup(title);
newNode->book_info.author = strdup(author);
newNode->book_info.year = year;
newNode->next = *head; // 将新的头节点设置为当前节点
*head = newNode; // 更新链表头指针
return newNode;
}
// 添加书籍到链表
void addBookToList(BookNode** head, const char* title, const char* author, int year) {
BookNode* newNode = createNewBook(head, title, author, year);
if (newNode == NULL) return;
// 遍历链表并查找插入位置(这里假设按年份升序排列)
for (BookNode* current = *head; current != NULL && newNode->book_info.year > current->book_info.year; current = current->next) {}
newNode->next = current->next;
current->next = newNode;
}
// 打印链表中的所有书籍信息
void printBooks(BookNode* head) {
BookNode* temp = head;
while (temp != NULL) {
printf("Title: %s\nAuthor: %s\nYear: %d\n", temp->book_info.title, temp->book_info.author, temp->book_info.year);
temp = temp->next;
}
}
int main() {
BookNode* head = NULL;
// 示例添加书籍
addBookToList(&head, "书1", "作者1", 2020);
addBookToList(&head, "书2", "作者2", 2019);
addBookToList(&head, "书3", "作者3", 2021);
// 打印链表
printBooks(head);
return 0;
}
```
在这个例子中,`main()`函数展示了如何初始化链表并将书籍信息添加进去,以及如何遍历链表打印出所有书籍信息。注意,为了演示这个功能,实际项目中你需要处理内存分配和释放(使用`strdup()`或自定义复制函数),以及更复杂的排序逻辑(如果需要)。
阅读全文