东北大学数据结构上机实验报告.docx

上传人:b****1 文档编号:1904157 上传时间:2023-05-02 格式:DOCX 页数:22 大小:79.96KB
下载 相关 举报
东北大学数据结构上机实验报告.docx_第1页
第1页 / 共22页
东北大学数据结构上机实验报告.docx_第2页
第2页 / 共22页
东北大学数据结构上机实验报告.docx_第3页
第3页 / 共22页
东北大学数据结构上机实验报告.docx_第4页
第4页 / 共22页
东北大学数据结构上机实验报告.docx_第5页
第5页 / 共22页
东北大学数据结构上机实验报告.docx_第6页
第6页 / 共22页
东北大学数据结构上机实验报告.docx_第7页
第7页 / 共22页
东北大学数据结构上机实验报告.docx_第8页
第8页 / 共22页
东北大学数据结构上机实验报告.docx_第9页
第9页 / 共22页
东北大学数据结构上机实验报告.docx_第10页
第10页 / 共22页
东北大学数据结构上机实验报告.docx_第11页
第11页 / 共22页
东北大学数据结构上机实验报告.docx_第12页
第12页 / 共22页
东北大学数据结构上机实验报告.docx_第13页
第13页 / 共22页
东北大学数据结构上机实验报告.docx_第14页
第14页 / 共22页
东北大学数据结构上机实验报告.docx_第15页
第15页 / 共22页
东北大学数据结构上机实验报告.docx_第16页
第16页 / 共22页
东北大学数据结构上机实验报告.docx_第17页
第17页 / 共22页
东北大学数据结构上机实验报告.docx_第18页
第18页 / 共22页
东北大学数据结构上机实验报告.docx_第19页
第19页 / 共22页
东北大学数据结构上机实验报告.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

东北大学数据结构上机实验报告.docx

《东北大学数据结构上机实验报告.docx》由会员分享,可在线阅读,更多相关《东北大学数据结构上机实验报告.docx(22页珍藏版)》请在冰点文库上搜索。

东北大学数据结构上机实验报告.docx

东北大学数据结构上机实验报告

实验一线性表应用

1、实验目的

对图书馆的图书信息管理作一个简单的模拟。

2、实验要求

设计图书信息管理的模拟程序。

1)采用顺序表登录图书成绩。

2)可以登记、查询、插入、删除图书成绩。

3)将图书信息按类别存储到链表中。

输入形式

图书信息

输出形式

图书信息

程序功能

登记、查询、插入、删除图书成绩

三、设计概要

流程图

抽象数据类型的定义

图书类型

typedefstruct{

intnum;//书号

charname[20];//书名

charauthor[20];//作者

charpress[20];//出版社名称

intcount;//存馆数量

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

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,&s->data.count,s->data.price);

q=L->next;

if(q==NULL){//下一个节点为空即此节点为尾节点

p->next=s;

p=s;

p->next=NULL;

printf("录入成功!

\n");

continue;

}

while(q!

=NULL){

if(strcmp(s->data.name,q->data.name)==0){

printf("此图书已存在!

");

printf("请重新输入:

\n");

scanf("%d%s%s%s%d%s",&p->data.num,p->data.name,

p->data.author,p->data.press,&p->data.count,

p->data.price);

}

q=q->next;

}

p->next=s;

p=s;

p->next=NULL;

printf("录入成功!

\n");

Sleep(1000);

}

system("cls");

menu();

return0;

查询

LinkList*p=L->next;//p指向第一个数据结点

intc;

intx=0;

charname1[10],author1[10],press1[10];

printf("1按书名查询:

\n");

printf("2按作者名查询:

\n");

printf("3按出版社名称:

\n");

printf("4返回\n");

printf("请选择1--4进行操作:

\n");

scanf("%d",&c);

if(c>4||c<1){

printf("您的输入有误!

\n");

scanf("%d",&c);

}

switch(c){

case1:

printf("请输入图书书名:

\n");

scanf("%s",name1);

while(p!

=NULL){

if(strcmp(name1,p->data.name)!

=0)//查找图书书名

p=p->next;

else{

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,p->data.name,

p->data.author,p->data.press,p->data.count,

p->data.price);

printf("\n");

p=p->next;

x++;

Sleep(2000);

system("cls");

menu();

}

}

if(p==NULL&&x==0)

printf("对不起,不存在此图书!

\n");

break;

case2:

printf("请输入图书作者:

\n");

scanf("%s",author1);

while(p!

=NULL){

if(strcmp(author1,p->data.author)!

=0)//查找图书作者

p=p->next;

else{

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,p->data.name,

p->data.author,p->data.press,p->data.count,

p->data.price);

printf("\n");

p=p->next;

x++;

Sleep(2000);

system("cls");

menu();

}

}

if(p==NULL&&x==0)

printf("对不起,不存在此图书!

\n");

break;

case3:

printf("请输入图书的出版社名称:

\n");

scanf("%s",press1);

while(p!

=NULL){

if(strcmp(press1,p->data.press)!

=0)//查找图书出版社名称

p=p->next;

else{

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d%s%s%s%d%s",

p->data.num,p->data.name,p->data.author,

p->data.press,p->data.count,p->data.price);

printf("\n");

p=p->next;

x++;

Sleep(2000);

system("cls");

menu();

}

}

if(p==NULL&&x==0)

printf("对不起!

不存在此图书\n");

break;

case4:

break;

}

五、调试分析

所遇问题的解决方法及分析

当我编写录入函数时,对如何将数据储存到链表中无从下手。

后来经过查询和多次尝试,决定用尾插法建立链表,采用这样的方法简单明了,易于编程。

 

算法的时空分析及改进设想

O(n)

 

经验和体会

通过这次的上机实验,让我们对线性表的理解又有了进一步的提升,更加清楚地了解到线性表的储存方式。

 

6、使用说明

打开程序,根据界面提示即可

7、测试结果(截屏)

 

 

8、附录

#include

#include

#include

#include

#include

typedefstruct{

intnum;

charname[20];

charauthor[20];

charpress[20];

intcount;

charprice[10];

}ElemType;

typedefstructLNode//定义单链表结点类型

{

ElemTypedata;

structLNode*next;

}LinkList;

voidmenu(){//菜单函数

printf("----------------------------------------------------------\n");

printf("欢迎光临图书管理系统!

\n");

printf("-----------------------------------------------------------\n");

printf("1.图书信息录入添加功能:

\n");

printf("2.图书信息查询功能:

\n");

printf("3.图书信息排序功能:

\n");

printf("4.图书的修改功能:

\n");

printf("5.图书的删除功能:

\n");

printf("0.退出系统:

\n");

printf("请选择你需要的操作:

\n");}

voidInitList(LinkList*L)//初始化线性表

{

L=(LinkList*)malloc(sizeof(LinkList));//创建头结点

L->next=NULL;

}

intCreateListR(LinkList*L)//尾插法建表

{

inti,n;

LinkList*s,*q,*p;

p=L;

while(p->next!

=NULL)

p=p->next;

printf("请输入需要录入的图书信息的个数:

n=");

scanf("%d",&n);

for(i=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,&s->data.count,s->data.price);

q=L->next;

if(q==NULL){

p->next=s;

p=s;

p->next=NULL;

printf("录入成功!

\n");

continue;

}

while(q!

=NULL){

if(strcmp(s->data.name,q->data.name)==0){

printf("此图书已存在!

");

printf("请重新输入:

\n");

scanf("%d%s%s%s%d%s",&p->data.num,p->data.name,

p->data.author,p->data.press,&p->data.count,

p->data.price);

}

q=q->next;

}

p->next=s;

p=s;

p->next=NULL;

printf("录入成功!

\n");

Sleep(1000);

}

system("cls");

menu();

return0;

}

voidLocateElem(LinkList*L)//查询

{

LinkList*p=L->next;//p指向第一个数据结点

intc;

intx=0;

charname1[10],author1[10],press1[10];

printf("1按书名查询:

\n");

printf("2按作者名查询:

\n");

printf("3按出版社名称:

\n");

printf("4返回\n");

printf("请选择1--4进行操作:

\n");

scanf("%d",&c);

if(c>4||c<1){

printf("您的输入有误!

\n");

scanf("%d",&c);

}

switch(c){

case1:

printf("请输入图书书名:

\n");

scanf("%s",name1);

while(p!

=NULL){

if(strcmp(name1,p->data.name)!

=0)//查找图书书名

p=p->next;

else{

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,p->data.name,

p->data.author,p->data.press,p->data.count,

p->data.price);

printf("\n");

p=p->next;

x++;

Sleep(2000);

system("cls");

menu();

}

}

if(p==NULL&&x==0)

printf("对不起,不存在此图书!

\n");

break;

case2:

printf("请输入图书作者:

\n");

scanf("%s",author1);

while(p!

=NULL){

if(strcmp(author1,p->data.author)!

=0)//查找图书作者

p=p->next;

else{

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,p->data.name,

p->data.author,p->data.press,p->data.count,

p->data.price);

printf("\n");

p=p->next;

x++;

Sleep(2000);

system("cls");

menu();

}

}

if(p==NULL&&x==0)

printf("对不起,不存在此图书!

\n");

break;

case3:

printf("请输入图书的出版社名称:

\n");

scanf("%s",press1);

while(p!

=NULL){

if(strcmp(press1,p->data.press)!

=0)//查找图书出版社名称

p=p->next;

else{

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d%s%s%s%d%s",

p->data.num,p->data.name,p->data.author,

p->data.press,p->data.count,p->data.price);

printf("\n");

p=p->next;

x++;

Sleep(2000);

system("cls");

menu();

}

}

if(p==NULL&&x==0)

printf("对不起!

不存在此图书\n");

break;

case4:

break;

}

}

intSort(LinkList*L)//递增有序排序(直接插入排序法)

{

LinkList*p=L->next,*q,*r;//p指向第一个数据结点

if(p!

=NULL)//若原单链表中有一个或以上的数据结点

{

r=p->next;//r保存*p结点直接后继结点的指针

p->next=NULL;//构造只含一个数据结点的有序表

p=r;

while(p!

=NULL){

r=p->next;//r保存*p结点的直接后继结点的指针

q=L;

while(q->next!

=NULL&&q->next->data.numdata.num)

q=q->next;//在有序表中找插入*p的直接前驱结点*q的位置

p->next=q->next;//将*p插入到*q之后

q->next=p;

p=r;//扫描原单链表余下的结点

}

}

return0;

}

voidDisplay(LinkList*L)//输出排序结果

{

LinkList*p=L->next;

while(p!

=NULL){

printf("书号书名作者出版社名称存馆数量定价\n");

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,

p->data.name,p->data.author,p->data.press,p->data.count,

p->data.price);

printf("\n");

p=p->next;

}

}

intModifyList(LinkList*L)//修改

{

LinkList*p=L;

charname1[10];

printf("请输入要修改的图书的书名:

\n");

scanf("%s",name1);

while(p!

=NULL){

if(strcmp(name1,p->data.name)==0)//查找所要修改的书名

{

printf("请输入修改后的信息!

\n");

printf("书号书名作者出版社名称存馆数量定价\n");

scanf("%d%s%s%s%d%s",&p->data.num,p->data.name,p->data.author,

p->data.press,&p->data.count,p->data.price);

printf("修改成功!

\n");

return0;

}

p=p->next;

}

printf("不存在此图书\n");

return0;

}

intListDelete(LinkList*L)//删除

{

LinkList*p=L->next,*q=L;

charname1[10];

if(p!

=NULL){

printf("请输入要删除的书名:

");

scanf("%s",name1);

}

while(p->next!

=NULL&&strcmp(p->data.name,name1)!

=0){

p=p->next;

q=q->next;

}

if(p->next!

=NULL)//如果p此时不是最后一个节点,说明此时已经找到书

{

q->next=p->next;

printf("删除成功!

\n");

return0;

}

if(p->next==NULL&&strcmp(name1,p->data.name)!

=0)//如果p此时为最后一个结点并且没有找到与之相符的书名

{

printf("你输入的书名不存在,请核实后重新输入!

\n");

}else{

q->next=NULL;

printf("删除成功!

\n");

}

return0;

}

 

}

intmain()//主函数

{

ints;

LinkList*L;

L=(LinkList*)malloc(sizeof(LinkList));

InitList(L);

menu();

printf("请输入编号:

\n");

scanf("%d",&s);

while(s!

=0){

switch(s){

case1:

CreateListR(L);

break;

case2:

LocateElem(L);

break;

case3:

Sort(L);

Display(L);

break;

case4:

ModifyList(L);

break;

case5:

ListDelete(L);

break;

case6:

Borrow(L);

break;

case7:

Return(L);

break;

case0:

printf("谢谢使用\n");

break;

}

scanf("%d",&s);

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2