链表成绩

Posted on 2020-01-02  29 Views


我辣鸡的c作业,非常苦恼

    #include
    #include
    #define st struct student
    #include
    st
    {
        int num,score[3];
        char name[9];
        struct student *next;
    };
    st * reat()
    {
            st *head=NULL,*p,*q;int n,i,max=0;char name[9]={'\0'};
        printf("请输入班级人数:");
        scanf("%d",&n);
            for(i=1;iname,&q->num,&q->score[0],&q->score[1],&q->score[2]);
                q->next=NULL;
                if(head==NULL)
                    head=q;
                else
                    p->next=q;
                p=q;
            }
        return(head);
    }
    st * dele(st *head)
    {
        int xue;char c;
        st *p,*q;
        p=head;
        printf("请输入要删除学生的学号");
        scanf("%d",&xue);
        while(p!=NULL&&p->num!=xue)
        {
            q=p;
            p=p->next;
        }
        getchar();
        printf("你确定删除吗y/n?:");
        scanf("%c",&c);
        if(c=='y')
        {
        if(p==NULL)
            printf("没有这个人\n");
        else if(p==head)
        {
            head=p->next;
            printf("已经删除信息\n");
        }
        else
        {
            q->next=p->next;
            printf("已经删除信息\n");
        }
        free(p);
        }
        return (head);
    }
    st *paixu(st * head)
    {
        st *p,*q,*N;
        int i=0;
        for(p=head;p->next!=NULL;p=p->next)
            i++;
        while(i--)
        {
            p=head;
            q=p->next;
            while(p->next!=NULL)
            {
                if(q->numnum)
                {
                    if(head==p)
                    {
                        p->next=q->next;
                        q->next=p;
                        head=q;
                        q=p;
                        p=head;
                    }
                    else
                    {
                        N=head;
                        while(N->next!=p)
                            N=N->next;
                        p->next=q->next;
                        q->next=p;
                        N->next=q;
                        N=q;
                        q=p;
                        p=N;
                    }
                }
                p=p->next;
                q=q->next;
            }
        }
        return head;
    }
    st *insert(st *head)
    {
        st *q=NULL;
        q=(st *)malloc(sizeof(st));
        printf("请输入要插入学生的姓名,学号,第一门课成绩,第二门课成绩,第三门课成绩:");
        scanf("%s%d%d%d%d",&q->name,&q->num,&q->score[0],&q->score[1],&q->score[2]);
        getchar();
        q->next=head;
        head=q;
        return (head);
    }
    void print(st *xue)
    {
        st *p;
        if(xue!=NULL)
        {
            for(p=xue;p!=NULL;p=p->next)
            {
            printf("学生的姓名%s,学号%d,第一门课成绩%d,第二门课成绩%d,第三门课成绩%d\n",p->name,p->num,p->score[0],p->score[1],p->score[2]);
            }
        }
        else printf("链表是空的,请建立链表!\n");
    }
    st * clear(st *head)
    {
            char c;
            getchar();
            printf("你确定删除吗y/n?:");
            scanf("%c",&c);
            if(c=='y')
                {
                    free(head);
                    head=NULL;
                 }
            return(head);
    }
        
     main()
    {
        st *xue=NULL;int x;
        while(1)
        {
            printf("1.建立学生成绩链表   2.对学生信息排序   3.插入学生信息   4.删除学生信息   5.输出预览   6.清空   ctrl+c退出\n请输入操作:");
            scanf("%d",&x);
            switch(x)
            {
            case 1:xue=reat();break;    
            case 2:xue=paixu(xue);break;
            case 3:xue=insert(xue);break;
            case 4:xue=dele(xue);break;
            case 5:print(xue);break;
            case 6:xue=clear(xue);break;
            }
            printf("\n");
            printf("\n");
        }
     }

本当の声を響かせてよ