1、 char price10; /定价 ElemType; 单链表结点类型typedef struct LNode ElemType data; struct LNode *next; LinkList;各程序模块之间的调用关系4、详细设计 初始化创建头结点 实现线性表的初始化 L = (LinkList *) malloc(sizeof(LinkList); L-next = NULL; 用户界面运用printf函数 录入 int i, n; LinkList *s, *q, *p; /创建单链表 p = L; while (p-next != NULL ) p = p-next; print
2、f(请输入需要录入的图书信息的个数:n=); scanf(%d, &n); for (i = 1; i data.num, s-data.name, s-data.author, s-data.press, &data.count, s-data.price); q = L- if (q = NULL ) /下一个节点为空 即此节点为尾节点 p-next = s; p = s; printf(录入成功!n continue; while (q != NULL ) if (strcmp(s-data.name, q-data.name) = 0) printf(此图书已存在!请重新输入: sca
3、nf(p-data.num, p-data.name, p-data.author, p-data.count, q = q- p- p = s; Sleep(1000); system(cls menu(); return 0;查询 LinkList *p = L- /p指向第一个数据结点 int c; int x = 0; char name110, author110, press110; 1 按书名查询: 2 按作者名查询: 3 按出版社名称: 4 返回n 请选择1-4进行操作:c); if (c 4 | c data.name) != 0) /查找图书书名 p = p- else %
4、dt%st%st%st%dt%s, p-data.press, p- x+; Sleep(2000); if (p = NULL & x = 0)对不起,不存在此图书! break; case 2:请输入图书作者:, author1); if (strcmp(author1, p-data.author) != 0) /查找图书作者 case 3:请输入图书的出版社名称:, press1); if (strcmp(press1, p-data.press) != 0) /查找图书出版社名称%d %s %s %s %d %s,data.name, p-data.count, p-对不起!不存在此
5、图书n case 4:五、调试分析 所遇问题的解决方法及分析 当我编写录入函数时,对如何将数据储存到链表中无从下手。 后来经过查询和多次尝试,决定用尾插法建立链表,采用这样的方法简单明了,易于编程。 算法的时空分析及改进设想O(n) 经验和体会通过这次的上机实验,让我们对线性表的理解又有了进一步的提升,更加清楚地了解到线性表的储存方式。6、使用说明 打开程序,根据界面提示即可7、测试结果(截屏)8、附录#include string.h#includemalloc.hwindows.htypedef struct LNode /定义单链表结点类型void menu() /菜单函数- n 欢迎光
6、临图书管理系统!- n1.图书信息录入添加功能:2.图书信息查询功能:3.图书信息排序功能:4.图书的修改功能:5.图书的删除功能:0.退出系统:请选择你需要的操作:void InitList(LinkList *L) /初始化线性表 /创建头结点int CreateListR(LinkList *L) /尾插法建表 i+) if (q = NULL ) void LocateElem(LinkList *L) /查询 LinkList *p = L- switch (c) int Sort(LinkList *L) /递增有序排序(直接插入排序法)next, *q, *r; if (p !=
7、 NULL ) /若原单链表中有一个或以上的数据结点 r = p- /r保存*p结点直接后继结点的指针 /构造只含一个数据结点的有序表 p = r; r = p- /r保存*p结点的直接后继结点的指针 q = L; while (q-= NULL & q-next-data.num data.num) q = q- /在有序表中找插入*p的直接前驱结点*q的位置next = q- /将*p插入到*q之后 q-next = p; p = r; /扫描原单链表余下的结点void Display(LinkList *L) /输出排序结果 while (p !%d t %s t %st %st%dt
8、%sdata.num, p-int ModifyList(LinkList *L) /修改 LinkList *p = L; char name110;请输入要修改的图书的书名: if (strcmp(name1, p-data.name) = 0) /查找所要修改的书名 请输入修改后的信息! scanf( p-修改成功! return 0;int ListDelete(LinkList *L) /删除next, *q = L;请输入要删除的书名: strcmp(p-data.name, name1) != 0) q = q- if (p-= NULL ) /如果p此时不是最后一个节点,说明此
9、时已经找到书 q-next = p-删除成功! return 0;next = NULL & strcmp(name1, p-= 0) /如果p此时为最后一个结点并且没有找到与之相符的书名 你输入的书名不存在,请核实后重新输入! else int main() /主函数 int s; LinkList *L; InitList(L);请输入编号:s); while (s ! switch (s) case 1: CreateListR(L); break; case 2: LocateElem(L); case 3: Sort(L); Display(L); case 4: ModifyList(L); case 5: ListDelete(L); case 6: Borrow(L); case 7: Return(L); case 0:谢谢使用n
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2