资源描述
《数据结构》实验报告
实验一、线性表的应用
一、实验目的
熟练掌握线性表的顺序存储结构和链式存储结构的建立方法以及基本操作算法,并根据实际问题的要求,灵活运用。
二、实验内容
本次实验要求以班级学生信息作为管理对象,通过实验练习,建立班级学生信息线性表的顺序存储结构和链式存储结构,并练习使用顺序表和单链表的基本操作算法,实现对班级学生信息的管理,包括学生信息的插入、学生信息的删除、学生信息的查询和学生信息线性表的输出。
三、完成情况
#include "stdio.h"
#include "malloc.h"
#define NULL 0
struct student
{char name[20];
char gender[8];
int num;
int score;
struct student *next;
};
int n;
struct student *head;
struct student *creat()
{struct student *p,*q;
int a;
n=0;
p=q=(struct student *)malloc(sizeof(struct student));
printf("请输入学生信息,按学号,姓名,性别,成绩:\n");
scanf("%d%s%s%d",&p->num,p->name,p->gender,&p->score);
head=NULL;
while(p->num!=0)
{n+=1;
if(n==1) head=p;
else q->next=p;
q=p;p=(struct student *)malloc(sizeof(struct student));
printf("请输入学生信息,按学号,姓名,性别,成绩:\n");
scanf("%d%s%s%d",&p->num,p->name,p->gender,&p->score);}
printf("完成,按'1'结束\n");
scanf("%d",&a);if(a)
{q->next=NULL; return(head);}
}
void print(struct student *head)
{int i;struct student *p;
printf("\n学号(8) 姓名(8) 性别 成绩\n");
printf("-------------------------------------------\n");
printf("学号,姓名,性别,成绩:\n ");
p=head;
for(i=0;i<n;i++)
{printf("第%d位学生:",i);
printf("%d%s%s%d\n",p->num,p->name,p->gender,p->score);
printf("-------------------------------------------\n");
p=p->next;}
}
void search(struct student *head,int number)
{struct student *p;
p=head;
while (p->num!=number)
{p=p->next;
if(p==NULL)
printf("学生信息不存在!\n");
else
{printf("该生的信息是:\n");
printf("%d%s%s%d\n",p->num,p->name,p->gender,p->score);}
}}
struct student *insert(struct student *head,int i)
{struct student *p,*q,*r;
int a;
p=head;
r=(struct student *)malloc(sizeof(struct student));
if(i=n+1)
{while(p->next!=NULL)p=p->next;
p->next=r;r->next=NULL;n+=1;return (head);}
else if(i<=n)
{for(a=0;a<i-1;a++)
p=p->next;
q=p-1;q->next=r;r->next=p;n+=1;
printf("完成\n");
return (head);}
else printf("空间不足!\n");
}
struct student *del(struct student *head,int number)
{struct student *p,*q;
p=head;
while (p->num!=number) p=p->next;
if (p==NULL) printf("该生不存在\n");
else
{q=p-1;q->next=p->next;free(p);printf("完成");n-=1;
return (head);}}
void main()
{int a,sn,dn,location;
printf("\n 学生信息管理系统\n");
printf("=========================================\n");
printf(" 1.学生信息线性表的建立\n");
printf(" 2.插 入 学 生 信 息\n");
printf(" 3.查 询 学 生 信 息\n");
printf(" 4.删 除 学 生 信 息\n");
printf(" 5.输 出 所有学生信息\n");
printf(" 0.退 出 管 理 系 统\n");
printf("==========================================\n");
printf("请选择0-5:\n");
scanf("%d",&a);
switch(a)
{
case 1:head=creat();break;
case 2:{printf("添加学生信息\n");printf("请输入要添加的学生信息,按学号、姓名、性别、成绩:\n");
scanf("%d",&location);head=insert(head,location);}break;
case 3:{printf("请输入学生学号\n");
scanf("%d",&sn);search(head,sn);}break;
case 4:{printf("请输入学生学号\n");
scanf("%d",&dn);head=del(head,dn);}break;
case 5:print(head);break;
case 0:printf("再见\n");break;}
}
四、实验结果
五、问题与解决
程序执行窗口执行完成后,自动关闭窗口,用户无法观察信息,于是手动添加了语句来实现人工结束窗口,第一次加到了return前,发现执行后没有起到作用,遂改为return前。
六、思考题
七、实验总结
程序执行过程中遇到return则直接返回,不执行剩余部分。该程序只是线性表创建、插入、删除等简单操作练习,没有基于数据写入,所以基本上这个程序只是一个框架,每部分都是独立的,随着知识的加深还可以改进此类程序。
实验成绩
评价项目
评分等级
独立完成完整的实验内容,结果完全正确,报告内容完整,排版整洁美观,能真实体现实际操作过程及遇到的问题。
A
完成实验,实验内容较为完整,结果正确,报告内容较为完整,排版较为整洁美观,能体现实际操作过程及遇到的问题。
B
基本完成实验,结果正确,报告内容欠缺,排版较为整洁美观,能体现实际操作过程及遇到的问题。
C
不能独立完成完整的实验内容,结果不真实,报告内容欠缺,排版欠整洁美观,不能体现实际操作过程及遇到的问题。
D
- 5 -
展开阅读全文