解题思路:先建立两个链表存储信息,在合并两个链表,在冒泡排序

注意事项:冒泡的时候注意判断条件

参考代码:

#include <stdio.h>

#include <stdlib.h>


typedef struct link_list{

    int id;

    int grades;

    struct link_list *prev, *next;

}link_list_t;


link_list_t *request_link_list(const int id, const int grades)

{

    link_list_t *node;


    node=malloc(sizeof(link_list_t));


    node->id=id;

    node->grades=grades;

    node->prev=node;

    node->next=node;


    return node;

}


link_list_t *request_head_link_list(const int id, const int grades)

{

    link_list_t *node;


    node=malloc(sizeof(link_list_t));


    node->prev=node;

    node->next=node;


    return node;

}


void insert_link_list(link_list_t *head_node, link_list_t *list_node)

{

    list_node->next=head_node->next;

    list_node->prev=head_node;

    head_node->next->prev=list_node;

    head_node->next=list_node;

}


void display_link_list(link_list_t *head_node)

{

    link_list_t *pos;

    for(pos=head_node->next; pos!=head_node; pos=pos->next)

    {

        printf("%d %d\n", pos->id, pos->grades);

    }

}


void init_link_list(link_list_t *head_node, link_list_t *head2_node)

{

    head2_node->next->prev=head_node;

    head2_node->prev->next=head_node->next;

    head_node->next->prev=head2_node->prev;

    head_node->next=head2_node->next;

}


void sort_link_list(link_list_t *head_node)

{

    link_list_t *pos1, *pos2, *n;

    int tmp, op;

    for(pos1=head_node->prev; pos1!=head_node; pos1=pos1->prev)

    {

        for(pos2=head_node->next; pos2!=pos1; pos2=pos2->next)

        {

            n=pos2->next;

            if(pos2->id>n->id)

            {

                tmp=pos2->id;

                pos2->id=n->id;

                n->id=tmp;

                op=pos2->grades;

                pos2->grades=n->grades;

                n->grades=op;

            }

        }

    }

}


int main(void)

{

    int cmd1, cmd2;

    int id, grades;

    scanf("%d %d", &cmd1, &cmd2);

    link_list_t *head_node, *head2_node, *list1, *list2;

    head_node=request_head_link_list(-1, -1);

    head2_node=request_head_link_list(-1, -1);


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

    {

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

        list1=request_link_list(id, grades);

        insert_link_list(head_node, list1);

    }


    for(int j=0; j<cmd2; j++)

    {

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

        list2=request_link_list(id, grades);

        insert_link_list(head2_node, list2);

    }

    init_link_list(head_node, head2_node);


    sort_link_list(head_node);


    display_link_list(head_node);


    return 0;

}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论