嵌入式学习-数据结构

数据结构-练习题

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值