数据结构链表实现学生管理实验报告.docx
《数据结构链表实现学生管理实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构链表实现学生管理实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构链表实现学生管理实验报告
计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称《数据结构》
项目名称链表实现学生管理
班级
学号
姓名
同组人员无
实验日期
一、实验目的与要求:
(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。
)
(一)实验目的:
应用链表来实现对数据的操作。
(二)实验要求:
用链表实现对数据的,增,删,改,查
(三)实验环境:
VC++6.0.
二、实验内容
#include
#include
#include
#defineError0
#defineOK1
typedefstructnode
{
charname[10];
charstuno[20];
floatscore;
structnode*next;
}LinkList;
/*置空表*/
LinkList*setnull(LinkList*L)
{
L->next=NULL;
returnL;
}
/*创建表*/
LinkList*createList()
{
LinkList*L,*S,*H;
inti=1;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
H=L;
while(i<5)
{
printf("请输入第%d个学生的姓名,学号,成绩\n",i);
S=(LinkList*)malloc(sizeof(LinkList));
scanf("%s",(S->name));
scanf("%s",(S->stuno));
scanf("%f",&(S->score));
//scanf("%s%s%f",(S->name),(S->stuno),&(S->score));
/*gets(S->name);
gets(S->stuno);
scanf("%f",&S->score);*/
S->next=NULL;
H->next=S;
H=S;
i++;
}
returnL;
}
/*链表的删除*/
LinkList*deleteList(LinkList*L,charstuno[])
{
if(L->next==NULL)
{
printf("此链表已经为空\n");
returnError;
}
while(L->next!
=NULL)
{
if(strcmp(L->next->stuno,stuno)==0)
{
L->next=L->next->next;
printf("--------------------------------------------------------");
printf("\n删除成功\n");
printf("--------------------------------------------------------");
returnL;
}
else
L=L->next;
}
printf("--------------------------------------------------------");
printf("\n对不起,没有找到你想要删除的学号,删除失败。
\n");
printf("--------------------------------------------------------\n");
returnL;
}
/*链表的增加*/
LinkList*insertList(LinkList*L,charname[],charstuno[],floatscore)
{
LinkList*p;
while(L->next!
=NULL)
L=L->next;
p=(LinkList*)malloc(sizeof(LinkList));
strcpy(p->name,name);
strcpy(p->stuno,stuno);
p->score=score;
p->next=NULL;
L->next=p;
L=p;
returnL;
}
/*链表的查找*/
LinkList*locateList(LinkList*L,charstuno[])
{
inti=1;
if(L->next==NULL)
{
printf("此链表为空,没有任何数据\n");
returnL;
}
while(L->next!
=NULL)
{
if(strcmp(L->next->stuno,stuno)==0)
{
printf("--------------------------------------------------------");
printf("\n第%d个学生的",i);
printf("姓名:
%s,学号:
%s,成绩:
%f\n",L->next->name,L->next->stuno,L->next->score);
printf("--------------------------------------------------------\n");
returnL;
}
L=L->next;
i++;
}
printf("--------------------------------------------------------");
printf("\n没有查到你的学生号。
\n");
printf("--------------------------------------------------------\n");
returnL;
}
/*输出链表*/
intprintList(LinkList*L)
{
LinkList*p;
inti=1;
p=L->next;
if(p==NULL)
{
printf("--------------------------------------------------------");
printf("\n此链表已经为空\n");
printf("--------------------------------------------------------\n");
returnError;
}
while(p!
=NULL)
{
printf("--------------------------------------------------------");
printf("\n第%d个学生的",i);
printf("姓名:
%s,学号:
%s,成绩:
%f\n",p->name,p->stuno,p->score);
printf("--------------------------------------------------------\n");
p=p->next;
i++;
}
returnOK;
}
voidmain()
{
LinkList*L;
intn;
charname[10];
charstuno[10];
floatscore;
printf("\t---------------------------请选择操作方式--------------------------\n");
printf("\t1:
建链表\t2删除表元素\t3:
输出表\t4:
增加表元素\n");
printf("\t5:
查找表元素\t0:
退出\n输入操作数:
");
scanf("%d",&n);
while(n)
{
if(n==1){
L=createList();
}
elseif(n==2){
printf("\n请输入想要删除的学号:
");
scanf("%s",stuno);
deleteList(L,stuno);
}
elseif(n==3)
{
printList(L);
}
elseif(n==4)
{
printf("请输入学生的姓名,学号,成绩:
");
scanf("%s",name);
scanf("%s",stuno);
scanf("%f",&score);
insertList(L,name,stuno,score);
}
if(n==5)
{
printf("请输入你要查找的学号:
");
scanf("%s",stuno);
locateList(L,stuno);
}
printf("\n\t---------------------------请选择操作方式--------------------------\n");
printf("\t1:
建链表\t2删除表元素\t3:
输出表\t4:
增加表元素\n");
printf("\t5:
查找表元素\t0:
退出\n输入操作数:
");
scanf("%d",&n);
}
}三、实验分析与小结
(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)
(1)实验结果截图
(2)总结
通过链表,分别实现了对数据的增、删、改、查。
四、其它
得分(百分制)