怎么对最后一个函数创造的链表进行排序

#include <stdio.h>
#include <malloc.h.>
#include <string.h>
#include <stdlib.h>
#include <time.h>

struct STU
{
    char name[20];
    char ID[10];
    int Chinese;
    int Math;
    int English;
    int Physics;
    int avg;
    struct STU *next;
}Stu1[45],Stu2[45],Stu3[45],Stu4[45];

void create(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void average(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void sort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void selectSort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);
void createList(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4);

int main()
{
    create(Stu1,Stu2,Stu3,Stu4);
    average(Stu1,Stu2,Stu3,Stu4);
    sort(Stu1,Stu2,Stu3,Stu4);
    selectSort(Stu1,Stu2,Stu3,Stu4);
    createList(Stu1,Stu2,Stu3,Stu4);
    return 0;
}

void create(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
    int i;
    srand((unsigned)time(NULL));

    for(i=0;i<45;i++)
    {
        Stu1[i].Chinese=rand()%100+1;
        Stu1[i].English=rand()%100+1;
        Stu1[i].Math=rand()%100+1;
        Stu1[i].Physics=rand()%100+1;
    }

    for(i=0;i<45;i++)
    {
        Stu2[i].Chinese=rand()%100+1;
        Stu2[i].English=rand()%100+1;
        Stu2[i].Math=rand()%100+1;
        Stu2[i].Physics=rand()%100+1;
    }

    for(i=0;i<45;i++)
    {
        Stu3[i].Chinese=rand()%100+1;
        Stu3[i].English=rand()%100+1;
        Stu3[i].Math=rand()%100+1;
        Stu3[i].Physics=rand()%100+1;
    }

    for(i=0;i<45;i++)
    {
        Stu4[i].Chinese=rand()%100+1;
        Stu4[i].English=rand()%100+1;
        Stu4[i].Math=rand()%100+1;
        Stu4[i].Physics=rand()%100+1;
    }

    return;
}

void average(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
    int i;

    for(i=0;i<45;i++)
    {
        Stu1[i].avg=(Stu1[i].Chinese+Stu1[i].English+Stu1[i].Math+Stu1[i].Physics)/4;
    }

    for(i=0;i<45;i++)
    {
        Stu2[i].avg=(Stu2[i].Chinese+Stu2[i].English+Stu2[i].Math+Stu2[i].Physics)/4;
    }

    for(i=0;i<45;i++)
    {
        Stu3[i].avg=(Stu3[i].Chinese+Stu3[i].English+Stu3[i].Math+Stu3[i].Physics)/4;
    }

    for(i=0;i<45;i++)
    {
        Stu4[i].avg=(Stu4[i].Chinese+Stu4[i].English+Stu4[i].Math+Stu4[i].Physics)/4;
    }

    return;
}

void sort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
    int i,j;
    struct STU tmp;

    for(i=0;i<45;i++)
    {
        for(j=0;j<45-i-1;j++)
        {
            if(Stu1[j].avg>Stu1[j+1].avg)
            {
                tmp=Stu1[j];
                Stu1[j]=Stu1[j+1];
                Stu1[j+1]=tmp;
            }
        }
    }

    for(i=0;i<45;i++)
    {
        for(j=0;j<45-i-1;j++)
        {
            if(Stu2[j].avg>Stu2[j+1].avg)
            {
                tmp=Stu2[j];
                Stu2[j]=Stu2[j+1];
                Stu2[j+1]=tmp;
            }
        }
    }

    for(i=0;i<45;i++)
    {
        for(j=0;j<45-i-1;j++)
        {
            if(Stu2[j].avg>Stu2[j+1].avg)
            {
                tmp=Stu2[j];
                Stu2[j]=Stu2[j+1];
                Stu2[j+1]=tmp;
            }
        }
    }

    for(i=0;i<45;i++)
    {
        for(j=0;j<45-i-1;j++)
        {
            if(Stu3[j].avg>Stu3[j+1].avg)
            {
                tmp=Stu3[j];
                Stu3[j]=Stu3[j+1];
                Stu3[j+1]=tmp;
            }
        }
    }

    for(i=0;i<45;i++)
    {
        for(j=0;j<45-i-1;j++)
        {
            if(Stu4[j].avg>Stu4[j+1].avg)
            {
                tmp=Stu4[j];
                Stu4[j]=Stu4[j+1];
                Stu4[j+1]=tmp;
            }
        }
    }

 

        return;
}

void selectSort(struct STU *Stu1,struct STU *Stu2,struct STU *Stu3,struct STU *Stu4)
{
    int i,j,min,position;
    struct STU tmp;

        for(i=0;i<45;i++)
        {
            min=Stu1[i].avg;
            position=i;
            for (j=i+1;j<44-i;j++)
            {
                if (Stu1[j].avg<min)
                {
                    min=Stu1[j].avg;
                    position=j;
                }
            }

            if(position!=i)
            {
                tmp=Stu1[i];
                Stu1[i]=Stu1[position];
                Stu1[position]=tmp;
            }
        }

        for(i=0;i<45;i++)
        {
            min=Stu2[i].avg;
            position=i;
            for (j=i+1;j<44-i;j++)
            {
                if (Stu2[j].avg<min)
                {
                    min=Stu2[j].avg;
                    position=j;
                }
            }

            if(position!=i)
            {
                tmp=Stu2[i];
                Stu2[i]=Stu2[position];
                Stu2[position]=tmp;
            }
        }

        for(i=0;i<45;i++)
        {
            min=Stu3[i].avg;
            position=i;
            for (j=i+1;j<44-i;j++)
            {
                if (Stu3[j].avg<min)
                {
                    min=Stu3[j].avg;
                    position=j;
                }
            }

            if(position!=i)
            {
                tmp=Stu3[i];
                Stu3[i]=Stu3[position];
                Stu3[position]=tmp;
            }
        }

        for(i=0;i<45;i++)
        {
            min=Stu3[i].avg;
            position=i;
            for (j=i+1;j<44-i;j++)
            {
                if (Stu4[j].avg<min)
                {
                    min=Stu4[j].avg;
                    position=j;
                }
            }

            if(position!=i)
            {
                tmp=Stu4[i];
                Stu4[i]=Stu4[position];
                Stu4[position]=tmp;
            }
        }
        return;
}

void createList()
{
    int i,j;
    struct STU *p1,*p2,*p;
    for(i=0;i<45;i++)
    {
        Stu1[i].next=&Stu1[i+1];
    }
    Stu1[44].next=&Stu2[0];
    for(i=0;i<45;i++)
    {
        Stu2[i].next=&Stu2[i+1];
    }
    Stu2[44].next=&Stu3[0];
    for(i=0;i<45;i++)
    {
        Stu3[i].next=&Stu3[i+1];
    }
    Stu3[44].next=&Stu4[0];
    for(i=0;i<45;i++)
    {
        Stu4[i].next=&Stu4[i+1];
    }
    Stu4[44].next=NULL;
 

 

参考GPT和自己的思路:

这个程序是按照每个结构体数组中的学生的平均成绩进行排序,并将他们按照一定的顺序连接在一起,最终创造了一个由多个结构体数组组成的链表。对于最后一个函数 createList(),它的功能是将所有的结构体数组按照顺序连接在一起,组成一个链表。在这个程序中,链表的头指针是 Stu1,链表的末尾指针是 Stu4,每个结构体数组都有一个 next 指针,指向下一个结构体数组的首元素。具体做法是先将 Stu1 数组的 next 指针指向 Stu2 的首元素,然后将 Stu2 数组的 next 指针指向 Stu3 的首元素,以此类推,直到将 Stu4 数组的 next 指针指向 NULL。