东北大学数据结构上机实验报告Word文档格式.docx
《东北大学数据结构上机实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《东北大学数据结构上机实验报告Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
![东北大学数据结构上机实验报告Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/93fd80aa-65d3-4e9d-987e-16214795bd2b/93fd80aa-65d3-4e9d-987e-16214795bd2b1.gif)
charprice[10];
//定价
}ElemType;
单链表结点类型
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LinkList;
各程序模块之间的调用关系
4、详细设计
初始化
创建头结点实现线性表的初始化
L=(LinkList*)malloc(sizeof(LinkList));
L->
next=NULL;
用户界面
运用printf函数
录入
inti,n;
LinkList*s,*q,*p;
//创建单链表
p=L;
while(p->
next!
=NULL)
p=p->
next;
printf("
请输入需要录入的图书信息的个数:
n="
);
scanf("
%d"
&
n);
for(i=1;
i<
n+1;
i++){//创建图书信息
s=(LinkList*)malloc(sizeof(LinkList));
printf("
书号书名作者出版社名称存馆数量定价\n"
scanf("
%d%s%s%s%d%s"
s->
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("
此图书已存在!
"
请重新输入:
scanf("
p->
data.num,p->
data.name,
p->
data.author,p->
data.count,
}
q=q->
p->
p=s;
Sleep(1000);
}
system("
cls"
menu();
return0;
查询
LinkList*p=L->
//p指向第一个数据结点
intc;
intx=0;
charname1[10],author1[10],press1[10];
1按书名查询:
2按作者名查询:
3按出版社名称:
4返回\n"
请选择1--4进行操作:
c);
if(c>
4||c<
1){
您的输入有误!
switch(c){
case1:
请输入图书书名:
\n"
%s"
name1);
while(p!
if(strcmp(name1,p->
data.name)!
=0)//查找图书书名
p=p->
else{
%d\t%s\t%s\t%s\t%d\t%s"
p->
data.press,p->
x++;
Sleep(2000);
if(p==NULL&
&
x==0)
对不起,不存在此图书!
break;
case2:
请输入图书作者:
author1);
if(strcmp(author1,p->
data.author)!
=0)//查找图书作者
case3:
请输入图书的出版社名称:
press1);
if(strcmp(press1,p->
data.press)!
=0)//查找图书出版社名称
%d%s%s%s%d%s"
data.name,p->
data.count,p->
对不起!
不存在此图书\n"
case4:
五、调试分析
所遇问题的解决方法及分析
当我编写录入函数时,对如何将数据储存到链表中无从下手。
后来经过查询和多次尝试,决定用尾插法建立链表,采用这样的方法简单明了,易于编程。
算法的时空分析及改进设想
O(n)
经验和体会
通过这次的上机实验,让我们对线性表的理解又有了进一步的提升,更加清楚地了解到线性表的储存方式。
6、使用说明
打开程序,根据界面提示即可
7、测试结果(截屏)
8、附录
#include<
stdio.h>
string.h>
#include<
stdlib.h>
malloc.h>
windows.h>
typedefstructLNode//定义单链表结点类型
{
voidmenu(){//菜单函数
----------------------------------------------------------\n"
欢迎光临图书管理系统!
-----------------------------------------------------------\n"
1.图书信息录入添加功能:
2.图书信息查询功能:
3.图书信息排序功能:
4.图书的修改功能:
5.图书的删除功能:
0.退出系统:
请选择你需要的操作:
}
voidInitList(LinkList*L)//初始化线性表
//创建头结点
intCreateListR(LinkList*L)//尾插法建表
i++){
if(q==NULL){
voidLocateElem(LinkList*L)//查询
LinkList*p=L->
switch(c){
intSort(LinkList*L)//递增有序排序(直接插入排序法)
next,*q,*r;
if(p!
=NULL)//若原单链表中有一个或以上的数据结点
{
r=p->
//r保存*p结点直接后继结点的指针
//构造只含一个数据结点的有序表
p=r;
r=p->
//r保存*p结点的直接后继结点的指针
q=L;
while(q->
=NULL&
q->
next->
data.num<
p->
data.num)
q=q->
//在有序表中找插入*p的直接前驱结点*q的位置
next=q->
//将*p插入到*q之后
q->
next=p;
p=r;
//扫描原单链表余下的结点
voidDisplay(LinkList*L)//输出排序结果
while(p!
%d\t%s\t%s\t%s\t%d\t%s"
data.num,
p->
intModifyList(LinkList*L)//修改
LinkList*p=L;
charname1[10];
请输入要修改的图书的书名:
if(strcmp(name1,p->
data.name)==0)//查找所要修改的书名
{
请输入修改后的信息!
scanf("
p->
修改成功!
return0;
intListDelete(LinkList*L)//删除
next,*q=L;
请输入要删除的书名:
strcmp(p->
data.name,name1)!
=0){
q=q->
if(p->
=NULL)//如果p此时不是最后一个节点,说明此时已经找到书
q->
next=p->
删除成功!
return0;
next==NULL&
strcmp(name1,p->
=0)//如果p此时为最后一个结点并且没有找到与之相符的书名
{
你输入的书名不存在,请核实后重新输入!
}else{
intmain()//主函数
ints;
LinkList*L;
InitList(L);
请输入编号:
s);
while(s!
switch(s){
case1:
CreateListR(L);
break;
case2:
LocateElem(L);
case3:
Sort(L);
Display(L);
case4:
ModifyList(L);
case5:
ListDelete(L);
case6:
Borrow(L);
case7:
Return(L);
case0:
谢谢使用\n"