单链表实现增删改查和学生管理(C语言)

由于编者时间以及水平有限,没有对输入的数据进行判断是否合法,有需要的可以加。
如有错误,敬请斧正 ʘᴗʘ

1.定义链表数据元素

typedef struct
{
    char id[16];
    char name[20];
    double score;
} Student;
//定义一个学生类型,用Student作别名
typedef struct LNode
{
    Student  data;
    struct LNode* next;/struct不能套用自身,但是指针就可以
} LNode, * LinkList;


1.2初始化链表(我不喜欢用这种)

为了美观,我选择在主函数初始化

LinkList InList(LinkList L)对整个结构体赋值,一个指针权限不够,要用多一个指针
{
    L=(LinkList)malloc(sizeof(LNode));//创建一个头,从内存中查找出LNode大小的内存用malloc函数创建并转化成LinkList类型
    L->next=NULL;
    return L;
}


以下在主函数中添加
    LinkList p,L;
    L=InList(&p);

 2.添加结点

①头插法

void CreatList_H(LinkList  L)
{
    LNode* newNode;
    int i, n;
    printf("你要添加多少个?");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        newNode = (LNode*)malloc(sizeof(LNode));
        printf("请输入你要添加的学号:");
        scanf("%s", &newNode->data.id);
        printf("请输入你要添加的姓名:");
        scanf("%s", &newNode->data.name);
        printf("请输入你要添加的分数:");
        scanf("%lf", &newNode->data.score);
        newNode->next = L->next;
        L->next = newNode;
    }
}

②尾插法

void CreatList_E(LinkList L) {
    LNode* newNode,*p;
    int i, n;
    printf("你要添加多少个?");
    scanf("%d", &n);
    p = L;
    while (p->next!=NULL)//指针指向最后
    {
        p = p->next;
    }
    for (i = 0; i < n; i++)
    {
        newNode = (LNode*)malloc(sizeof(LNode));
        printf("请输入你要添加的学号:");
        scanf("%s", &newNode->data.id);
        printf("请输入你要添加的姓名:");
        scanf("%s", &newNode->data.name);
        printf("请输入你要添加的分数:");
        scanf("%lf", &newNode->data.score);
        newNode->next = NULL;
        p->next = newNode;
        p = newNode;
    }
}

3.修改结点

void ReviseStudent(LinkList L) {
    LNode* p;
    char x[20];
    p = L->next;
    printf("你想修改的学生学号是什么?");
    scanf("%s", &x);
    while (p != NULL)
    {
        if (strcmp(x, p->data.id) == 0) {
            printf("新修改后的学号是?");
            scanf("%s", &p->data.id);
            printf("新修改后的姓名是?");
            scanf("%s", &p->data.name);
            printf("新修改后的分数是?");
            scanf("%lf", &p->data.score);
            printf("修改成功成功\n");
            return;
        }
        p = p->next;
    }
    printf("不存在这个学生");
}

 4.插入结点

void InsertStudent(LinkList L){
    LNode* p, *q,*new;
    p = L;
    q = p->next;
    char x[20];
    int  y;
    new = (LNode*)malloc(sizeof(LNode));
    printf("你想插在谁的学号前面?");
    scanf("%s", &x);
    while (q!=NULL)
    {
        if (strcmp(x, q->data.id) == 0) {
    printf("你想插入的学号是什么?");
    scanf("%s", &new->data.id);
    printf("你想插入的姓名是什么?");
    scan
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值