1.10图书关键词的检索*** 【基本要求】 (1)从文件中读入关键词建立关键词索引表或书名。 注意:这里的索引表(即字符串堆的存储方式)要求采用第4章课件中最后的应用举例--图书馆关键字的方式。 (2)主要功能: 检索:输入书名确定与其相关的书号。 入库:输入新书名添加到索引表。 (3)选做:常用词过滤、删除等 【演示结果】(菜单操作) (1)显示从文件读取的内容。 (2)显示索引表中所有关键字及相关书号。 (3)输入书名(多个单词),显示每个关键字相关书号。 (4)输入新书名及书号,显示添加结果。 注意:检索和入库功能应可多次操作。数据结构 c语言
时间: 2024-01-01 16:03:28 浏览: 181
这是一个基于字符串堆的图书关键词检索系统,使用C语言实现。
数据结构:
1. 首先,我们需要定义一个结构体来存储每本书的信息,包括书名和书号。
```
typedef struct book {
char name[50]; // 书名
int num; // 书号
} Book;
```
2. 接下来,我们需要定义一个链表节点的结构体,用于存储每个关键词的信息,包括关键词和与之相关的书号。
```
typedef struct node {
char keyword[20]; // 关键词
int num[100]; // 与之相关的书号
int count; // 相关书号的个数
struct node *next; // 下一个节点
} Node;
```
3. 最后,我们需要定义一个指向链表头节点的指针,来存储所有关键词的信息。
```
Node *head = NULL; // 链表头节点指针
```
实现细节:
1. 从文件中读入关键词建立索引表
我们可以使用fgets函数从文件中逐行读入每个书名,然后通过strtok函数将书名分割成多个关键词,并将每个关键词插入到链表中。如果链表中已经存在该关键词,则将该书号添加到该关键词对应的书号数组中。
2. 检索功能
用户输入一个书名,我们需要将其分割成多个关键词,并在链表中查找每个关键词对应的书号数组,并将所有书号数组取交集,即可得到与该书名相关的所有书号。
3. 入库功能
用户输入一个新书名和其对应的书号,我们需要将该书名分割成多个关键词,并将每个关键词插入到链表中。如果链表中已经存在该关键词,则将该书号添加到该关键词对应的书号数组中。如果链表中不存在该关键词,则创建一个新节点,并将该书号添加到书号数组中。
4. 常用词过滤、删除等
这些功能可以在链表插入和查找的过程中进行实现,比如在插入关键词时,可以进行常用词过滤;在查找关键词时,可以将不需要的关键词删除。
演示结果:
我们可以通过一个简单的菜单实现系统的操作:
1. 显示从文件读取的内容。
2. 显示索引表中所有关键字及相关书号。
3. 输入书名(多个单词),显示每个关键字相关书号。
4. 输入新书名及书号,显示添加结果。
5. 退出系统。
用户可以根据菜单进行操作,可以多次进行检索和入库操作。
阅读全文