目录
前言
一、顺序表的功能、程序及程序运行的结果:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示打印学生表中所有学生的相关信息及功能目录;
(3)根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
二、链表的功能及程序运行的结果(运行的结果的截图都是按顺序截图的)
三、全部代码
前言
定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
代码下载地址(包含实验报告):
https://gitee.com/cheng-hanyuan/example_projec/tree/main/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
全部代码我放在我的资源
“C语言:定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表.zip”里面,可以下载。
一、顺序表的功能、程序及程序运行的结果:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示打印学生表中所有学生的相关信息及功能目录;
代码:
void initlist( Seqlist L)//建立一个空的顺序线性表
{
L->length=0;
L->listsize=MAXSIZE;
}
void displist(Seqlist L)//打印学生信息
{
int i;
for( i=1;i<=L->length;i++)
{
printf("姓名:%sn",L->elem[i-1].name);
printf("学号:%sn",L->elem[i-1].no);
printf("成绩:%dn",L->elem[i-1].price);
}
printf("n");
}
void inputlist(Seqlist L)//学生信息的输入
{
int i,n;
printf("请输入学生的个数:");
scanf("%d",&n);
for(i=0;ielem[i].name);
printf("学号:");
scanf("%s",&L->elem[i].no);
printf("成绩:");
scanf("%d",&L->elem[i].price);
L->length++;
}
printf("n");
}
运行的结果:
(3)根据姓名进行查找,返回此学生的学号和成绩;
代码:
void nameseeklist(Seqlist L)//根据学生姓名查找学生信息
{
int i;
char name[20];
printf("请输入查找学生姓名:");
scanf("%s",&name);
for(i=0;ilength;i++)
{
if(strcmp(L->elem[i].name,name)==0)
{
break;
}
}
if(strcmp(L->elem[i].name,name)==0)
{
printf("该学生的信息:n");
printf("学号:%sn成绩:%dn",L->elem[i].no,L->elem[i].price);
}
else
printf("该表中没有该学生!n");
}
运行结果:
当输入的名字没有该名字,程序会说明没有该学生并返回选择功能的操作。
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
代码:
void seeklist(Seqlist L)//根据学生节点位置查找学生信息
{
int i;
printf("请输入查找学生的结点:");
scanf("%d",&i);
while(i<1||i>L->length)
{
printf("输入超出学生的总数,请重新输入查找学生的节点:");
scanf("%d",&i);
}
printf("该学生的信息:n");
printf("姓名:%sn学号:%sn成绩:%dn",L->elem[i-1].name,L->elem[i-1].no,L->elem[i-1].price);
}
运行结果如下:
输入结点程序会返回该学生的信息;当输入的结点值不在表长之内,程序就显示输入有误,重新输入结点。
(5) 给定一个学生信息,插入到表中指定的位置;
代码:
void insertlist(Seqlist L)//学生信息的插入
{
int i,j,x;
printf("请输入要插入学生的节点位置:");
scanf("%d",&i);
if(L->length==MAXSIZE)
printf("存储已满,无法插入n");
while(i<1||i>(L->length+1))
{
printf("无法插入,请重新输入插入学生的节点位置:");
scanf("%d",&i);
}
for(j=L->length-1;j>=i-1;j--)
{
L->elem[j+1]=L->elem[j];
}
printf("请输入学生的信息:n");
printf("姓名:");
scanf("%s",&L->elem[i-1].name);
printf("学号:");
scanf("%s",&L->elem[i-1].no);
printf("成绩:");
scanf("%d",&L->elem[i-1].price);
++L->length;
printf("n");
}
运行结果:
键盘输入插入的结点。当输入的结点值不符合时,程序就会提示有误,重新输入。
续图:
(6) 删除指定位置的学生记录;
代码:
void deletelist(Seqlist L)//学生信息的删除
{
int i;
int j;
printf("请输入删除学生的节点:");
scanf("%d",&i);
while(i<1||i>L->length)
{
printf("输入超出学生的总数,请重新输入删除学生的节点:");
scanf("%d",&i);
}
for(j=i;j<=L->length-1;j++)
{
L->elem[j-1]=L->elem[j];
}
L->length--;
}
运行结果如下:
(7) 统计表中学生个数。
int lengthlist(Seqlist L)//求表中学生的总数
{
return L->length;
}
结果:
二、链表的功能及程序运行的结果(运行的结果的截图都是按顺序截图的)
| 链表的功能及程序运行的结果(运行的结果的截图都是按顺序截图的,即截图都是相连的):
功能:(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
运行的结果:
(3) 根据姓名进行查找,返回此学生的学号和成绩;
运行结果:
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
运行结果:
(5) 给定一个学生信息,插入到表中指定的位置;
运行结果:
(6) 删除指定位置的学生记录;
运行结果;
(7) 统计表中学生个数。
三、全部代码 单链表:
#include #include #include #include typedef struct { char no[10]; //8位学号 char name[20]; //姓名 int price; //成绩 }Student;
typedef struct LNode { Student data; struct LNode *next; }LNode,*linklist;
linklist creatlist()//(头插入法)输入学生信息。 { linklist L,p; int i,n; L=(linklist)malloc(sizeof(LNode)); L->next=NULL; printf("请输入要录入学生的个数:"); scanf("%d",&n); for(i=0;i { p=(linklist)malloc(sizeof(LNode)); printf("请输入学生的信息:n"); printf("姓名:"); scanf("%s",&p->data.name); printf("学号:"); scanf("%s",&p->data.no); printf("成绩:"); scanf("%d",&p->data.price); p->next=L->next; L->next=p; } return L; }
void putlist(linklist L)//打印学生信息。 { linklist p; p=L->next; while(p) { printf("姓名:%sn学号:%sn成绩:%dn",p->data.name,p->data.no,p->data.price); p=p->next; printf(" "); }printf("n"); }
int lengthlist(linklist L)//求学生的总数。 { linklist p; int j; p=L->next; j=0; while(p!=NULL) { j++; p=p->next; } printf("表中的学生总数为:%dn",j); } void namegetlist(linklist L)//根据学生姓名查找学生的信息。 { char name[10]; int j=1; linklist p; printf("请输入查找学生的姓名:"); scanf("%s",&name); p=L->next; while(p&&strcmp(p->data.name,name)!=0) { p=p->next; j++; } if(p) printf("该学生的信息:n学号:%sn成绩:%dn",p->data.no,p->data.price); else printf("该表中没有该学生的信息。"); } void getlist(linklist L)//根据学生结点位置查找学生信息。 { int i,j=1,l=0; linklist p; printf("请输入查找学生的位置结点:"); scanf("%d",&i); p=L->next; while(p!=NULL) { l++; p=p->next; } p=L->next; while((p->next)&&(j { p=p->next; ++j; } while(i>l) { printf("输入的结点值超过学生总数 ,请重新输入学生的位置结点:"); scanf("%d",&i); } while((p!=NULL)&&(j { p=p->next; j++; } printf("查找学生信息:n姓名:%sn学号:%sn成绩:%dn",p->data.name,p->data.no,p->data.price); }
void insertlist(linklist L)//学生信息插入。 { int i,j,l; linklist p,s; p=L;l=0; while(p!=NULL) { l++; p=p->next; } printf("请输入插入学生的结点位置:"); scanf("%d",&i); while(l { printf("输入的结点值已超过总数,请重新输入插入学生的结点位置:"); scanf("%d",&i); } p=L;j=1; while(p&&(j { p=p->next; ++j; } s=(linklist)malloc(sizeof(LNode)); printf("请输入学生的信息:n"); printf("姓名:"); scanf("%s",&s->data.name); printf("学号:"); scanf("%s",&s->data.no); printf("成绩:"); scanf("%d",&s->data.price); s->next=p->next; p->next=s; printf("学生信息插入成功!"); printf("n"); } void deletelist(linklist L)//学生信息的删除。 { int i,j,l=0; linklist p,q; p=L->next; while(p!=NULL) { l++;p=p->next; } printf("请输入要删除学生的位置结点:"); scanf("%d",&i); while(l { printf("输入的结点值超过总数,请重新输入要删除学生的位置结点:"); scanf("%d",&i); } p=L; j=1; while((p->next)&&(j { p=p->next; ++j; } q=p->next; p->next=q->next; free(q); printf("删除成功!n"); }
int main()//主函数 { linklist L; int k; L=creatlist(); printf("n"); putlist(L); printf("学生信息输入成功!n"); printf("学生信息管理系统的操作目录:n"); printf("__________________________n"); printf("__________________________n"); printf("1、根据学生的结点位置查找学生信息;2、求表中学生的总数;3、插入学生的信息;4、删除学生的信息;5、根据学生的姓名查找学生信息。n"); printf("__________________________n"); while(1) { printf("请选择操作:"); scanf("%d",&k); switch(k) { case 0:printf("谢谢使用!");exit(0); case 1:getlist(L);break; case 2:lengthlist(L);break; case 3:insertlist(L);putlist(L);break; case 4:deletelist(L);putlist(L);break; case 5:namegetlist(L);break; } } }
顺序表:
#include #include #include #include #define MAXSIZE 100 typedef struct { char name[10]; //姓名 char no[8]; //8位学号 int price; //成绩 }Student; typedef struct { Student elem[100]; //指向数据元素的基地址 int length; //线性表的当前长度 int listsize;//表长 }Sqlist,*Seqlist;
void initlist( Seqlist L)//建立一个空的顺序线性表 { L->length=0; L->listsize=MAXSIZE; }
void displist(Seqlist L)//打印学生信息 { int i; for( i=1;i<=L->length;i++) { printf("姓名:%sn",L->elem[i-1].name); printf("学号:%sn",L->elem[i-1].no); printf("成绩:%dn",L->elem[i-1].price); } printf("n"); }
void inputlist(Seqlist L)//学生信息的输入 { int i,n; printf("请输入学生的个数:"); scanf("%d",&n); for(i=0;i { printf("请输入学生的信息:n"); printf("姓名:"); scanf("%s",&L->elem[i].name); printf("学号:"); scanf("%s",&L->elem[i].no); printf("成绩:"); scanf("%d",&L->elem[i].price); L->length++; } printf("n"); }
void seeklist(Seqlist L)//根据学生节点位置查找学生信息 { int i; printf("请输入查找学生的结点:"); scanf("%d",&i); while(i<1||i>L->length) { printf("输入超出学生的总数,请重新输入查找学生的节点:"); scanf("%d",&i); } printf("该学生的信息:n"); printf("姓名:%sn学号:%sn成绩:%dn",L->elem[i-1].name,L->elem[i-1].no,L->elem[i-1].price); }
void nameseeklist(Seqlist L)//根据学生姓名查找学生信息 { int i; char name[20]; printf("请输入查找学生姓名:"); scanf("%s",&name); for(i=0;ilength;i++) { if(strcmp(L->elem[i].name,name)==0) { break; } } if(strcmp(L->elem[i].name,name)==0) { printf("该学生的信息:n"); printf("学号:%sn成绩:%dn",L->elem[i].no,L->elem[i].price); } else printf("该表中没有该学生!n");
}
void deletelist(Seqlist L)//学生信息的删除 { int i; int j; printf("请输入删除学生的节点:"); scanf("%d",&i); while(i<1||i>L->length) { printf("输入超出学生的总数,请重新输入删除学生的节点:"); scanf("%d",&i); } for(j=i;j<=L->length-1;j++) { L->elem[j-1]=L->elem[j]; } L->length--; } void insertlist(Seqlist L)//学生信息的插入 { int i,j,x; printf("请输入要插入学生的节点位置:"); scanf("%d",&i); if(L->length==MAXSIZE) printf("存储已满,无法插入n"); while(i<1||i>(L->length+1)) { printf("无法插入,请重新输入插入学生的节点位置:"); scanf("%d",&i); } for(j=L->length-1;j>=i-1;j--) { L->elem[j+1]=L->elem[j]; } printf("请输入学生的信息:n"); printf("姓名:"); scanf("%s",&L->elem[i-1].name); printf("学号:"); scanf("%s",&L->elem[i-1].no); printf("成绩:"); scanf("%d",&L->elem[i-1].price); ++L->length; printf("n"); }
int lengthlist(Seqlist L)//求表中学生的总数 { return L->length; }
void main()//学生信息管理系统的主函数 { Sqlist L1; Seqlist L=&L1; int k; initlist(L);//建立一个空的顺序线性表 inputlist(L);//输入学生的信息。 printf("n"); displist(L);//打印学生的信息。 printf("学生信息输入成功!n"); printf("n"); printf("学生信息管理系统的操作目录:n"); printf("__________________________n"); printf("__________________________n"); printf("1、根据学生的结点位置查找学生信息;2、根据学生的姓名查找学生信息;3、插入学生的信息;4、删除学生的信息;5、求表中学生的总数。n"); printf("__________________________n"); while(1) { printf("请选择操作:"); scanf("%d",&k); switch(k) { case 0:printf("谢谢使用!");exit(0); case 1:seeklist(L);break; case 2:nameseeklist(L);break; case 3:insertlist(L);displist(L);break; case 4:deletelist(L);displist(L);break; case 5:printf("该表中学生总数:%dn",lengthlist(L));break; } } }
下载地址(包含实验报告):
https://gitee.com/cheng-hanyuan/example_projec/tree/main/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
若无法下载,私信我,本人一定会发给各位小可爱的!
|