数据结构-练习题
stu_hwork.c
#ifndef __STU_H__
#define __STU_H__
typedef struct student
{
int id;
char name[30];
int score;
}student;
typedef struct Node
{
union
{
//student *stu;//应该队指针申请空间>
student stu;
int len;
};
struct Node *next;
}Node;
//链表创建
Node *create_stu();
//尾插
int insert_tail(Node *s,int id, char *name,int score);
//按位置查找学生信息
Node *search_stu(Node *s, int pos);
//判空
int empty_stu(Node *s);
void menu();//菜单输出
void input(Node *s);//输入学生姓名和成绩
void display(Node *s);//班级学生概况
void score_max(Node *s);//查找成绩最高的学生
void score_rank(Node *s);//对班级学生按照成绩排名
void stu_search(Node *s);//查找学生是否存在
#endif
main.c
#include<stdio.h>
#include<stdlib.h>
#include"stu_hwork.h"
#include<string.h>
int main(int argc, const char *argv[])
{
int m;//操作序号
Node *s=create_stu();//创建表头
if(s==NULL){printf("创建失败\n");return -1;}
while(1)
{
menu();
printf("*********学生管理系统**********\n");
printf("请输入操作序号1,2,3,4,5,0\n");
scanf("%i",&m);
getchar();
switch(m)
{
case 1:input(s);break;
case 2:display(s);break;
case 3:score_max(s);break;
case 4:score_rank(s);break;
case 5:stu_search(s);break;
case 0:exit(0);
case 0:exit(0);
default :printf("您输入的操作序号有误,请重新输入\n\n\n");
}
}
return 0;
}
stu_hwork.c
//------------学生管理系统--作业-----------
#include<stdio.h>
#include<stdlib.h>
#include"stu_hwork.h"
#include<string.h>
void menu()
{
printf("**********学生管理系统*******************\n");
printf("1:学生成绩录入\n");
printf("2:班级学生概况\n");
printf("3:查找班级成绩最高的学生\n");
printf("4:对班级学生成绩排名一览表\n");
printf("5:查找学生是否存在于该班级\n");
printf("0:退出系统\n");
printf("*******************************************\n");
}
void input(Node *s)
{
if(s==NULL){printf("输入有误\n");return;}
while(1)
{
printf("请输入下一个学生信息:id,姓名,成绩\n");
printf("是否继续输入:1继续,0结束");
int id,score;char name[30];int flag=0;
scanf("%d%s%d%d", &id, name ,&score,&flag);
getchar();
insert_tail(s,id,name,score);
if(flag==0){break;}
}
return;
}
void display(Node *s)
{
if(s==NULL||s->len==0){printf("输入链表有误或没有学生\n");return;}
printf("班级的学生情况为\n");
printf("\tid \t name\tscore\n");
Node *p=s;
for(int i=0;i<s->len;i++)
{
p=p->next;
printf("\t%d\t%s\t%d\n",p->stu.id,p->stu.name,p->stu.score);
}
p=NULL;
printf("\n");
return;
}
void score_max(Node *s)
{
int max_id=0;
int max_score=0;
Node *p=s;
for(int i=1;i<s->len+1;i++)
{
p=p->next;
if(max_score<p->stu.score)
{
max_score=p->stu.score;
max_id=i;
}
}
p=search_stu(s,max_id);
printf("班级成绩最高的学生信息为:\n\tid:%d\t学生:%s\t分数:%d\n", \
p->stu.id,p->stu.name,p->stu.score);
}
void score_rank(Node *s)//冒泡排序 由高到底排序
{
char max_name[100];
int max_score;
Node *p;
Node *q;
Node *n;
for(int i=1;i<s->len;i++)
{
for(int j=1;j<s->len-i+1;j++)
{
n=search_stu(s,j-1);
p=search_stu(s,j);
q=search_stu(s,j+1);
if(p->stu.score<q->stu.score)
{
n->next=q;
p->next=q->next;
q->next=p;
}
}
}
printf("按成绩从高到底排名之后");
display(s);
}
void stu_search(Node *s)
{
if(s==NULL||empty_stu(s)){printf("输入错误或班级没有学生\n");}
int flag=0;//用于判断学生是否存在
char name_search[30];
printf("输入你要查询的学生姓名:\n");
scanf("%s",name_search);
getchar();
Node *p;
Node *q;
for(int i=1;i<s->len+1;i++)
{
p=search_stu(s,i-1);
q=search_stu(s,i);
if(strcmp(name_search,q->stu.name)==0)
{
printf("该学生存在,是否删除?(y/n)\n");
char choice[1];
scanf("%s",choice);
getchar();
flag=1;
if(strcmp(choice,"y")==0)
{
p->next=q->next;
free(q);
q=NULL;
s->len--;
printf("该学生已删除,删除后");
display(s);
break;
}
else
{
printf("学生保留,现在");
display(s);
}
}
}
if(flag==0)
{
printf("该学生不存在\n");
}
}
//链表创建
Node *create_stu()
{
Node *S=(Node*)malloc(sizeof(Node));
if(S==NULL){printf("创建失败\n");}
S->len=0;
S->next=NULL;
printf("创建成功\n");
return S;
}
//尾插
int insert_tail(Node *s,int id, char *name,int score)
{
if(s==NULL){printf("链表输入不合法\n");return -1;}
Node *p=(Node*)malloc(sizeof(Node));
p->next=NULL;
p->stu.id=id;
p->stu.score=score;
strcpy(p->stu.name,name);
//尾部插入逻辑
Node *q=s;
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
s->len++;
printf("学生信息录入成功\n");
return 0;
}
//按位置查找学生信息
Node *search_stu(Node *s, int pos)
{
if(s==NULL||pos<0||pos>s->len){printf("输入链表有误或输入有误\n");
return NULL;}
Node *p=s;
for(int i=0;i<pos;i++)
{
p=p->next;
}
return p;
}
//判空
int empty_stu(Node *s)
{
if(s=NULL){printf("输入不合法");return -1;}
return s->next==NULL?1:0;
}
result
创建成功
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
1
请输入下一个学生信息:id,姓名,成绩
是否继续输入:1继续,0结束1 hyp 34 1
学生信息录入成功
请输入下一个学生信息:id,姓名,成绩
是否继续输入:1继续,0结束2 hct 32 1
学生信息录入成功
请输入下一个学生信息:id,姓名,成绩
是否继续输入:1继续,0结束3 ssq 56 1
学生信息录入成功
请输入下一个学生信息:id,姓名,成绩
是否继续输入:1继续,0结束4 zpw 42 0
学生信息录入成功
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
2
班级的学生情况为
id name score
1 hyp 34
2 hct 32
3 ssq 56
4 zpw 42
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
3
班级成绩最高的学生信息为:
id:3 学生:ssq 分数:56
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
4
按成绩从高到底排名之后班级的学生情况为
id name score
3 ssq 56
4 zpw 42
1 hyp 34
2 hct 32
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
5
输入你要查询的学生姓名:
ssq
该学生存在,是否删除?(y/n)
n
学生保留,现在班级的学生情况为
id name score
3 ssq 56
4 zpw 42
1 hyp 34
2 hct 32
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
5
输入你要查询的学生姓名:
hct
该学生存在,是否删除?(y/n)
y
该学生已删除,删除后班级的学生情况为
id name score
3 ssq 56
4 zpw 42
1 hyp 34
学生管理系统*********
1:学生成绩录入
2:班级学生概况
3:查找班级成绩最高的学生
4:对班级学生成绩排名一览表
5:查找学生是否存在于该班级
0:退出系统
学生管理系统*
请输入操作序号1,2,3,4,5,0
0