完成一个图书表(文件名book.txt)的初始化(创建),图书结点的输入(建立)、取值、插入、删除、输出算法的实现。数据结构
时间: 2024-09-24 22:07:14 浏览: 61
在C语言中,我们可以创建一个简单的链表结构来模拟图书表,每个链表节点表示一本书。以下是这个过程的基本步骤:
1. **初始化(创建)**:
- 创建一个`Book`结构体,包含标题`title`,作者`author`和出版年份`year`。
```c
typedef struct BookNode {
char title[100];
char author[100];
int year;
struct BookNode* next;
} BookNode;
```
- 初始化文件`book.txt`:无具体内容,因为我们通常不会直接在文本文件中存储整个链表,而是可能在需要时将链表内容写入。
2. **图书结点输入(建立)**:
- 可以通过读取文件(如果存在)或者用户输入来创建节点,但此处仅作为演示,假设有一个已知的数据集。
```c
void add_book(BookNode** head, const char* title, const char* author, int year) {
BookNode* newNode = malloc(sizeof(BookNode));
newNode->title = strdup(title);
newNode->author = strdup(author);
newNode->year = year;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
BookNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
```
3. **取值**:
- 通过遍历链表访问节点数据。
```c
void get_book_info(BookNode* node) {
printf("Title: %s, Author: %s, Year: %d\n", node->title, node->author, node->year);
}
```
4. **插入**:
- 使用`add_book`函数向链表尾部插入新的书籍。
```c
void insert_book(BookNode** head, const char* title, const char* author, int year) {
... // 同上
}
```
5. **删除**:
- 删除指定年的书籍,可通过遍历链表并在找到相应节点时断开连接。
```c
void delete_book(BookNode** head, int year) {
BookNode* prev = NULL, *current = *head;
while (current != NULL && strcmp(current->title, "待删除的书名") != 0) {
if (strcmp(current->title, "待删除的书名") == 0 && current->year == year) {
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
break;
}
prev = current;
current = current->next;
}
}
```
6. **输出**:
- 遍历链表显示所有书籍的信息。
```c
void print_book_list(BookNode* head) {
BookNode* current = head;
while (current != NULL) {
get_book_info(current);
current = current->next;
}
}
```
注意,实际应用中可能会涉及文件操作,例如从文件读取数据或持久化链表,这里仅做了简化处理。此外,删除和搜索功能需要指定具体的“待删除的书名”,此处为了简洁未做展示。
阅读全文