xiao


私信TA

用户名:xyg

访问量:121

签 名:

等  级
排  名 3566
经  验 1820
参赛次数 1
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

    #include<stdio.h>

    #include<stdlib.h>


    typedef struct student

    {

        int id;

        int score;

        struct student *next;

    }link,*LinkNode;


    void init(LinkNode *L);     //初始化列表

    void create(LinkNode *L,int n); //根据输入的个数创建列表

    void concat(LinkNode *L1,LinkNode *L2);//将俩列表连接

    void sort(LinkNode *L1);//排序

    void print(LinkNode L);//打印输出


    /*

        下面这一段本来是想将每个列表中的值一次比较

        将最小的连接在第三个链表后,后来发现,每个链表不是顺序排序的

        后来想写个排序函数,将两个链表排完序在来做排序,发现太多余了

        陷入了僵局,看到大佬写的,直接将链表合并后,比较,然后交换其值

        嗯。。。。。


    */

    // LinkNode sort(LinkNode *L1,LinkNode *L2)

    // {

    //  LinkNode L3;

    //  init(&L3);

    //  link *p,*q;

    //  p = (*L1)->next;

    //  q = (*L2)->next;

    //  while(p && q)

    //  {

    //      if(p->id = q->id)

    //      {

    //          L3->next = p;

    //          L3 = p;

    //          p = p->next;

    //      }else{

    //          L3->next = q;

    //          L3 = q->next;

    //          q = q->next;

    //      }

    //  }

    //  if(p)

    //  {

    //      L3->next = p;

    //  }else{

    //      L3->next = q;

    //  }

    //  return L3;

    // }



    int main()

    {

        LinkNode L1,L2;

        int n,m;

        init(&L1);

        init(&L2);

        scanf("%d %d",&n,&m);

        create(&L1,n);

        create(&L2,m);

        // print(L1);

        // print(L2);

        concat(&L1,&L2);

        sort(&L1);

        // printf("+++++++++\n");

        print(L1);

        // LinkNode L3;

        // L3 = sort(&L1,&L2);

        // printf("++++++++++++++++\n");

        // print(L3);

        return 0;

    }


    void init(LinkNode *L)

    {

        *L = (LinkNode)malloc(sizeof(link));

        (*L)->next = NULL;

    }


    void create(LinkNode *L,int n)

    {

        int id,score;

        LinkNode r = *L;

        for(int i = 0;i < n;i++)

        {

            link *p;

            scanf("%d %d",&id,&score);

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

            p->id = id;

            p->score = score;

            r->next = p;

            r = p;

        }

        r->next = NULL;

    }


    void concat(LinkNode *L1,LinkNode *L2)

    {

        LinkNode p,q;

        p = (*L1)->next;

        while(p)

        {

            q = p;

            p = p->next;

        }

        q->next = (*L2)->next;

        free(*L2);

    }



    void sort(LinkNode *L1)

    {

        LinkNode p,q;

        p = (*L1)->next;

        for(p;p != NULL;p = p->next)

        {

            for(q = p;q != NULL;q = q->next)

            {

                int temp1,temp2;

                if(p->id >= q->id)

                {

                    temp1 = p->id;      //比较后交换值,成绩也要交换

                    p->id = q->id;

                    q->id = temp1;

                    temp2 = p->score;

                    p->score = q->score;

                    q->score = temp2;

                }

            }

        }

    }


    void print(LinkNode L)

    {

        LinkNode p = L->next;

        while(p)

        {

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

            p = p->next;

        }

    }


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区