大一c语言链表不会了不会了

求一个大一c语言链表的简单程序,涉及到建立,查询,删除以及函数的调用

参考:https://blog.csdn.net/qfl_sdu/article/details/118326835
链表的增删改查操作都有

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int value;
    struct LNode *next;
} LNode, *Linklist;

Linklist list_Creat()
{
    int value;
    Linklist L = (Linklist)malloc(sizeof(LNode)); 
    LNode *head = L, *rear = L;
    head->next = NULL;
    head->value = 0;
    printf("请输入链表的值,输入-1结束:\n");
    scanf("%d", &value);
    while (value != -1)
    {
        Linklist s = (Linklist)malloc(sizeof(LNode));
        s->value = value;
        s->next = NULL;
        rear->next = s;
        rear = s;
        scanf("%d", &value);
    }
    return L;
}
void list_Display(Linklist L)
{
    LNode *p = L->next;
    while (p != NULL)
    {
        printf("%d ", p->value);
        p = p->next;
    }
    printf("\n");
}

int list_Query(Linklist L, int val)
{
    Linklist p = L->next;
    while (p != NULL)
    {
        if (p->value == val)
        {
            printf("已找到%d!\n", val);
            return 1;
        }
        p = p->next;
    }
    printf("找不到查询的数!\n");
    return -1;
}

void list_Del(Linklist L, int val)
{
    Linklist p = L->next, pre;
    pre = p;
    while (p != NULL)
    {
        if (p->value == val)
        {
            pre->next = p->next;
            free(p);
            p = pre->next;
            printf("已删除%d!\n", val);
            return;
        }
        pre = p;
        p = p->next;
    }
    printf("%d不存在!\n", val);
}

int main()
{
    Linklist L1 = NULL;
    int s = 0, val;
    do
    {
        printf("\n\t1.建立链表\n");
        printf("\t2.查询\n");
        printf("\t3.删除\n");
        printf("\t4.显示链表\n");
        printf("\t5.退出\n");
        printf("\t输入选择:");
        scanf("%d", &s);
        switch (s)
        {
        case 1:
            L1 = list_Creat();
            break;
        case 2:
            printf("输入要查询的数:");
            scanf("%d", &val);
            list_Query(L1, val);
            break;
        case 3:
            printf("输入要删除的数:");
            scanf("%d", &val);
            list_Del(L1, val);
            break;
        case 4:
            list_Display(L1);
            break;
        case 5:
            exit(0);
            break;
        }
    } while (1);

    return 0;
}

修改后的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMBSCORE 3
struct StNode
{
    int num;        //学号
    char name[20];  //姓名 
    StNode* next;
};



//录入信息
struct StNode* Input(struct StNode* head)
{
    struct StNode* p,*node;
    int i;
    system("cls");
    node = (struct StNode*)malloc(sizeof(struct StNode));
    //录入信息
    printf("请输入学号:");
    scanf("%d",&node->num);
    printf("请输入姓名:"); 
    scanf("%s",node->name);
    
    node->next = 0;

    if (head == 0)
    {
        head = node;
        //
    }else
    {
        p = head;
        while(p->next)
            p = p->next;
        //新建节点
        p->next = node;
    }
    system("pause");
    return head;
}
//显示所有学生信息
void showAll(struct StNode* head)
{
    struct StNode* p;
    int i=1,j;
    system("cls");
    p = head;
    while(p)
    {
        printf("学生%d学号:%d\n",i,p->num);
        printf("学生%d姓名:%s\n",i,p->name); 
        printf("\n");
        i++;
        p = p->next;
    }
    system("pause");
}

//查询信息
void Find(struct StNode* head)
{
    int opt;
    struct StNode* p = head;
    int id,j;
    char name[20]={0};
    system("cls");
    printf("1.按学号查询\n");
    printf("2.按姓名查询\n"); 
    scanf("%d",&opt);
    switch(opt)
    {
    case 1:
        printf("请输入学号:");
        scanf("%d",&id);
        while(p)
        {
            if(p->num == id)
            {
                printf("学生学号:%d\n",p->num);
                printf("学生姓名:%s\n",p->name); 
                printf("\n");
                break;
            }
            p = p->next;
        }
        if(p==0)
            printf("查无此人\n");
        break;
    case 2:
        printf("请输入姓名:");
        scanf("%s",name);
        while(p)
        {
            if(strcmp(p->name,name) ==0)
            {
                printf("学生学号:%d\n",p->num);
                printf("学生姓名:%s\n",p->name); 
                
                printf("\n");
                break;
            }
            p = p->next;
        }
        if(p==0)
            printf("查无此人\n");
        break;
    }
    system("pause");
}





//删除学生信息
void DeleteInfo(struct StNode* head)
{
    struct StNode* node,*pre;
    int id,i;
    system("cls");
    printf("请输入需要删除信息的学生学号:");
    scanf("%d",&id);

    if (head->num == id)
    {
        node = head->next;
        free(head);
        head = node;
        printf("该学生信息已经删除\n");
        system("cls");
        return;
    }else
    {
        pre = head;
        node = head->next;
        while(node)
        {
            if (node->num == id)
            {
                pre->next = node->next;
                free(node);
                node = 0;
                printf("该学生信息已经删除\n");
                system("pause");
                return;
            }else
            {
                pre = node;
                node = node->next;
            }
        }
        printf("查无此人\n");
        system("pause");
    }
}



int main()
{
    struct StNode* head = 0;
    int opt = 0;
    int bgo = 1;
    
    while(bgo)
    {
        system("cls");
        printf("--------------学生信息管理系统---------------|\n");
        printf("|   1.录入学生信息                           |\n");
        printf("|   2.显示所有学生信息                       |\n");
        printf("|   3.学生信息查询                           |\n");
        printf("|   4.学生信息删除                           |\n");
        printf("|   0.退出系统                               |\n");
        printf("----------------------------------------------\n");
        scanf("%d",&opt);
        switch(opt)
        {
        case 0:
            bgo = 0;
            break;
        case 1:
            head = Input(head);
            break;
        case 2:
            showAll(head);
            break;
        case 3:
            Find(head);
            break;
        case 4:
            DeleteInfo(head);
            break;
        }
    }
    return 0;
}