今天你也学英语了嘛


私信TA

用户名:uq_88410785464

访问量:902

签 名:

等  级
排  名 3784
经  验 1840
参赛次数 0
文章发表 3
年  龄 20
在职情况 学生
学  校 西安财经大学
专  业 软件工程

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

#include<stdio.h>

#include<malloc.h>

typedef struct student//定义学生结构体

{

    int id;

    int score;

    struct Node *next;

}student;


student *creat(int n)//输入学生个体的值

{

    student *h;//定义一个头结点

    h=(student *)malloc(sizeof(student));

    h->next=NULL;//头结点指向空

    student *q=h;//q结点指向头结点 保持头结点不变

    student *p;//定义一个将要插入的结点

    for(int i=0;i<n;i++)//尾插法插入链表

    {

        p=(student*)malloc(sizeof(student));

        scanf("%d %d",&p->id,&p->score);

        p->next=q->next;

        q->next=p;

        q=p;

    }

    return (h);

}

void append(student *s1,student *s2)

{

    student* tail=s1;

    while(tail->next!=NULL)

    {

        tail=tail->next;

    }

    tail->next=s2->next;//s2链表头结点为空所以指向头结点的下一个结点

}

void swap(student *s1,student *s2)//交换函数 只需交换结点中的数值

{

    int tempid=s1->id;

    s1->id=s2->id;

    s2->id=tempid;

    int tscore=s1->score;

    s1->score=s2->score;

    s2->score=tscore;

}

void sort(student *s1)//排序函数

{

    student *star=s1->next;//定义一个初始结点指向链表头结点的下一个 因为头结点没有值

    while(star!=NULL)

    {

        student *p=star;//定义p结点为初始结点

        int minid=p->id;//定义最小学号

        student *min=p;//存放最小学号的结点

        while(p!=NULL)

        {

            if(p->id<minid)

            {

                minid=p->id;//更新最小值

                min=p;//更新最小结点

            }

            p=p->next;

        }

        swap(min,star);//最小结点与待排区结点的第一个交换

        star=star->next;

    }

}

void print(student *s1)

{

    student *h=s1->next;

    while(h!=NULL)

    {

        printf("%d %d\n",h->id,h->score);

        h=h->next;

    }

}

int main()

{

    int a,b;

    scanf("%d %d",&a,&b);

    student *s1=creat(a);//创建a链表

    student *s2=creat(b);//创建b链表

    append(s1,s2);

    sort(s1);

    print(s1);

    return 0;

}


 

0.0分

2 人评分

  评论区

  • «
  • »