数据结构实验报告二单链表的应用
《数据结构》实验报告实验二、单链表的应用
专业
班级
学号
学生姓名
指导老师
河南科技大学管理学院
年月日
一、实验目的
熟练掌握线性表的链式存储结构的建立方法以及基本操作算法,并根据实际问题的要求,灵活运用。
二、实验内容
本次实验要求以班级学生信息作为管理对象,根据实验一建立班级学生信息线性表的链式存储结构,并练习使用单链表的基本操作算法,实现对班级学生信息的管理,包括学生信息的插入、学生信息的删除、学生信息的查询和学生信息线性表的输出。
三、完成情况
#include
#include
//#define MAXSIZE 100
typedef struct{
char num[8];/*学号*/
char name[9];/*姓名*/
char gender[3];/*性别*/
int score;/*成绩*/
}DataType;
typedef struct
{
DataType data;
struct LNode *next;
}LNode,*LinkList;
int menu_select()
{
int sn;
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");
for(;;)
{
scanf("%d",&sn);
if (sn<0 || sn>5)
printf("\n\t输入错误,重选0-5\n");
else
break;
}
return sn;
}
void createList(LinkList L)
{
int n,i=0;
LNode *p;
printf("有几位学生?请输入:\n");
fflush(stdin);
scanf("%d",&n);
printf("以下请输入这%d位学生的信息:\n",n);
for(i=0;i { printf("第%d位学生:",i); printf("\n学号(8)姓名(8)性别成绩\n"); fflush(stdin); p=(LinkList)malloc(sizeof(LNode)); scanf("%s%s%s%d",p->data.num,p->https://www.360docs.net/doc/2111420546.html,,p->data.gender,&p->data.score); p->next=L->next;L->next=p; } } void printList(LinkList L) { int i=0; LNode *p; p=L->next; printf("\n学号(8)姓名(8)性别成绩\n"); printf("-------------------------------------------\n"); while(p) { printf("第%d位学生:",i); printf("%s,%s,%s,%d\n",p->data.num,p->https://www.360docs.net/doc/2111420546.html,,p->data.gender,p->data.score); printf("------------------------------------------------------------------\n"); p=p->next;i++; } } int insert(LinkList L,LNode *student,int i) { int j; LNode *p; p=L; j=0; while(p && j if(!p||j>i-1) printf("ERROR\n"); else{ student->next=p->next; p->next=student; } return 1; } int findList(LinkList L) { char num[8]; char name[9]; int xz; LNode *p;p=L; printf("===========================\n"); printf("1、按学号查询\n"); printf("2、按姓名查询\n"); printf("===========================\n"); printf(" 请选择:"); fflush(stdin); scanf("%d",&xz); if (xz==1) { printf("请输入要查找学生的学号:"); scanf("%s",num); p=L->next; while(p) { if(strcmp(p->data.num,num)!=0) p=p->next; else break;} return p; } else if (xz==2) { printf("请输入要查找学生的姓名:"); scanf("%s",name); p=L->next; while(p) { if(strcmp(p->data.num,num)!=0) p=p->next; else break;} return p; } } void delNode(LinkList L) { int i;LNode *p,*q;q=L; printf("请先查找您要删除的学生信息:\n"); p=findList(L); if(!p) { printf("没有查到要删除的学生信息"); return; } while(q->next!=p) { q=q->next; } q->next=p->next; printf("该学生信息已被删除!\n"); } void main() { LinkList L; LNode *student,*p; int i; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; while(1){ switch(menu_select()) { case 1: printf("**************************************\n"); printf(" 学生信息线性表的建立\n"); printf("***************************************\n"); createList(L); break; case 2: printf("**************************************\n"); printf("添加学生信息\n"); printf("请输入要添加的学生信息:\n"); printf("\n学号(8)姓名(8)性别成绩\n"); printf("**************************************\n"); student=(LinkList)malloc(sizeof(LNode)); fflush(stdin); scanf("%s%s%s%d",student->data.num,student->https://www.360docs.net/doc/2111420546.html,,student->data.gender,&studen t->data.score); printf("请输入要插入的位置:\n"); fflush(stdin); scanf("%d",&i); insert(L,student,i); break; case 3: printf("**************************************\n"); printf("查询学生信息\n"); printf("**************************************\n"); p=findList(L); if(p) { printf("您要查的学生为:\n学号(8)姓名(8)性别成绩\n"); printf("-------------------------------------------\n"); printf("%s,%s,%s,%d\n",p->data.num,p->https://www.360docs.net/doc/2111420546.html,,p->data.gender,p->data.score); printf("------------------------------------------------------------------\n"); } else printf("没有您要查询的学生信息!"); break; case 4: printf("**************************************\n"); printf("删除学生信息\n"); printf("**************************************\n"); delNode(L); break; case 5: printf("**************************************\n"); printf("输出所有学生信息\n"); printf("**************************************\n"); printList(L); break; case 0: printf("再见!\n"); getch(); return; } } } 实验成绩