7,23 用单链表表实现学生成绩管理系统

头文件代码#ifndef __SSYSTEM_H__#define __SSYSTEM_H__typedef struct{ float score; char name[20]; int id;}datatype;typedef struct Node{ union{ datatype data; int len; }; struct Node* next;}Student;//申请节点Stu...
摘要由CSDN通过智能技术生成

d8155b21060d4fbba857f93c91aceae6.png

 头文件代码

#ifndef __SSYSTEM_H__
#define __SSYSTEM_H__

typedef struct
{
    float score;
    char name[20];
    int id;
}datatype;

typedef struct Node
{
    union{
        datatype data;
        int len;
    };
    struct Node* next;
}Student;

//申请节点
Student *node_buy(datatype e);
//判空
int list_empty(Student *S);
//信息输入
datatype info_add();
//创建
Student *create();
//遍历
void list_show(Student *S);
//尾插
int list_insrt_tail(Student *S,datatype e);
//按位置查找返回查找节点
Student *find_node(Student *S,int pos);
//按学号查找返回查找节点的前驱节点
Student *find_node_id(Student *S,int old_id);
//按姓名查找返回查找节点的前驱节点
Student *find_node_name(Student *S,char old_name[])
//头删
int list_delete_head(Student *S);
//任意位置删
int list_delete_pos(Student *S,int pos);
//任意学号删
int list_delete_id(Student *S,int old_id);
//任意姓名删
int list_delete_name(Student *S,char old_name[]);
//按学号查找返回信息
int list_search_value_id(Student *S,int e);
//按成绩查找返回信息
int list_search_value_score(Student *S,int e);
//按姓名查找返回信息
int list_search_value_name(Student *S,char e[]);
//位置修改
int list_update_pos(Student *S,int pos,datatype new_e);
//按学号修改
int list_update_value_id(Student *S,int old_id,datatype new_e);
//按姓名修改
int list_update_name(Student *S,char old_name[],datatype new_e);
//销毁
void list_delete_all(Student *S);

 


#endif

被调函数


 #include<stdio.h>
#include<stdlib.h>
#include"ssystem"
#include<string.h>


Student *node_buy(datatype e)
{
    Student *p = (Student *)malloc(sizeof(Student));
    if(NULL == p)
    {
        printf("节点申请失败\n");
        return NULL;
    }
    p->data = e;
    p->next = NULL;
    return p;
}
 
//判空
int list_empty(Student *S)
{
    //1表示空  0表示非空
    return NULL == S->next ? 1:0;
}
 
//信息输入
datatype info_add()
{
    datatype val;
    printf("请输入姓名:\n");
    scanf("%s",val.name);
    printf("请输入学号:\n");
    scanf("%d",&val.id);
    printf("请输入分数:\n");
    scanf("%f",&val.score);
    return val;
}


Student *create()
{
    //申请结点
    Student *p=(Student *)malloc(sizeof(Student));
    if(NULL==p)
    {
        printf("创建失败\n");
        return NULL;
    }
    //初始化
    p->len=0;
    p->next=NULL;
    printf("创建成功\n");
    return p;
}


void list_show(Student *S)
{
    if(NULL==S || list_empty(S))
    {
        printf("表空,遍历失败\n");
        return;
    }
    printf("链表元素分别是:\n");
    Student *q = S->next;
    while(q != NULL)
    {
        printf("%s\t%d\t%.2f\n",q->data.name,q->data.id,q->data.score);
        q = q->next;
    }
}


int list_intsrt_tail(Student *S,datatype e)
{
    //判断逻辑
    if(NULL==S)
    {
        printf("所给的链表不合法\n");
        return -1;
    }
    //调用结点申请函数申请一个子结点
    Student *p = node_buy(e);
    //定义遍历指针定位到链表尾部
    Studen

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值