C语言链表实现图书管理系统 | 图书删除、修改、查找功能详解
C语言链表实现图书管理系统:图书删除、修改、查找功能详解
本文将介绍如何使用C语言链表实现图书管理系统中的三个核心功能:删除图书 (deleteBook)、修改图书 (modifyBook) 和查找图书 (searchBook)。
1. deleteBook() 函数:删除指定编号的图书
该函数首先获取用户想要删除的图书编号,然后遍历链表查找该图书。
-
如果找到,则删除该节点并释放其内存空间,同时更新链表指针以保持链表的完整性。* 如果没有找到,则提示用户'没有找到相关图书!'。cvoid deleteBook() { char bookCode[20]; printf('请输入要删除的图书编号:'); scanf('%s', bookCode);
if (head == NULL) { printf('没有找到相关图书! '); return; }
if (strcmp(head->bookCode, bookCode) == 0) { BookNode *temp = head; head = head->next; free(temp); printf('删除成功! '); return; }
BookNode *current = head; while (current->next != NULL) { if (strcmp(current->next->bookCode, bookCode) == 0) { BookNode *temp = current->next; current->next = temp->next; free(temp); printf('删除成功! '); return; } current = current->next; }
printf('没有找到相关图书! ');}
时间复杂度: O(n),其中 n 是链表中节点的数量。在最坏情况下,需要遍历整个链表才能找到要删除的图书。
2. modifyBook() 函数:修改指定编号的图书信息
该函数首先获取用户想要修改的图书编号,然后遍历链表查找该图书。
-
如果找到,则提示用户输入新的图书信息,并更新该节点的数据。* 如果没有找到,则提示用户'没有找到相关图书!'。cvoid modifyBook() { char bookCode[20]; printf('请输入要修改的图书编号:'); scanf('%s', bookCode);
if (head == NULL) { printf('没有找到相关图书! '); return; }
BookNode *current = head; while (current != NULL) { if (strcmp(current->bookCode, bookCode) == 0) { printf('请输入新的书名:'); scanf('%s', current->bookName); printf('请输入新的作者:'); scanf('%s', current->author); printf('请输入新的出版社:'); scanf('%s', current->publisher); printf('请输入新的图书种类:'); scanf('%s', current->bookkind); printf('请输入新的图书种类编号:'); scanf('%s', current->bookkinds); printf('请输入新的价格:'); scanf('%d', ¤t->quantity); printf('修改成功! '); return; } current = current->next; }
printf('没有找到相关图书! ');}
时间复杂度: O(n),其中 n 是链表中节点的数量。在最坏情况下,需要遍历整个链表才能找到要修改的图书。
3. searchBook() 函数:查找指定书名的图书
该函数首先获取用户想要查找的书名,然后遍历链表查找该图书。
-
如果找到,则打印该图书的详细信息。* 如果没有找到,则提示用户'没有找到相关图书!'。cvoid searchBook() { char bookName[50]; printf('请输入要查找的书名:'); scanf('%s', bookName);
if (head == NULL) { printf('没有找到相关图书! '); return; }
BookNode *current = head; int found = 0; while (current != NULL) { if (strcmp(current->bookName, bookName) == 0) { printf('图书编号:%s ', current->bookCode); printf('书名:%s ', current->bookName); printf('作者:%s ', current->author); printf('出版社:%s ', current->publisher); printf('图书种类:%s ', current->bookkind); printf('图书种类编号:%s ', current->bookkinds); printf('价格:%d ', current->quantity); printf('借阅状态:%s ', current->borrowed ? '已借出' : '未借出'); found = 1; } current = current->next; }
if (!found) { printf('没有找到相关图书! '); }}
时间复杂度: O(n),其中 n 是链表中节点的数量。在最坏情况下,需要遍历整个链表才能找到要查找的图书。
4. 流程图
以下是三个函数的流程图:
deleteBook()
开始 -> 输入要删除的图书编号 -> 链表为空? -> 是: 打印'没有找到相关图书!' -> 结束 | -> 否: 头节点是目标节点? -> 是: 删除头节点 -> 打印'删除成功!' -> 结束 | -> 否: 遍历链表 -> 找到目标节点? -> 是: 删除目标节点 -> 打印'删除成功!' -> 结束 | -> 否: 打印'没有找到相关图书!' -> 结束
modifyBook()
开始 -> 输入要修改的图书编号 -> 链表为空? -> 是: 打印'没有找到相关图书!' -> 结束 | -> 否: 遍历链表 -> 找到目标节点? -> 是: 修改图书信息 -> 打印'修改成功!' -> 结束 | -> 否: 打印'没有找到相关图书!' -> 结束
searchBook()
开始 -> 输入要查找的书名 -> 链表为空? -> 是: 打印'没有找到相关图书!' -> 结束 | -> 否: 遍历链表 -> 找到目标节点? -> 是: 打印图书信息 -> 结束 | -> 否: 打印'没有找到相关图书!' -> 结束
总结
本文介绍了如何使用C语言链表实现图书管理系统中的删除图书、修改图书和查找图书功能,并分析了它们的时间复杂度。链表是一种常用的数据结构,可以方便地进行数据的插入、删除和查找操作。在实际应用中,可以根据具体需求选择合适的数据结构来实现图书管理系统。
原文地址: https://www.cveoy.top/t/topic/fx8s 著作权归作者所有。请勿转载和采集!