yytssf


私信TA

用户名:Terrence

访问量:4472

签 名:

慢慢来吧

等  级
排  名 1738
经  验 2584
参赛次数 0
文章发表 6
年  龄 0
在职情况 待业
学  校 北京理工大学
专  业

  自我简介:

解题思路:





注意事项:





参考代码:

#include<stdio.h>

#include<stdlib.h>

 

typedef struct students

{

  int num ;

  int score;

   students* next;

}students_t;

 

students_t* sort_create(int chain);  //创建链表,并升序排列

students_t* insert(students_t* head, students_t*p); //在链表中插入节点

void print(students_t* head); //将链表中的数据打印出来

void deletechain(students_t* head); //将链表占用的地址释放

 

int main()

{

students_t *head_n = 0,*head_m = 0,*temp;

int n ,m;

scanf("%d%d",&n,&m); //输入链表的长度

head_n = sort_create(n);

head_m = sort_create(m);

while(head_m)

{

    temp = head_m;

    head_m = head_m -> next;

    head_n = insert(head_n,temp);

    //head_m = head_m -> next; 放在这里会由于上一个步骤->next被改变所以要放在insert之前,先移动到下一个节点,所以head_m链表也被上个步骤破坏了,之后不能再使用了。

}//将m链表插入到n的链表中

print(head_n);

deletechain(head_n);//由于被合并了所以释放head_n就可以了。

return 0;

}

 

students_t* insert(students_t* head, students_t*p)

{

    students_t* p1,*p2;

    if(head ==0) //空链表

    {

        head = p;

        p -> next = 0;

        return head;

    }

    if(p->num < head ->num) //插入链表头部

    {

        p->next = head;

        head = p;

        return head;

    }

    p2 = p1 = head;

    while(p2-> next != 0 && p2->num < p-> num) //寻找插入位置

    {

        p1 = p2;

        p2 = p2->next;

    }

    if(p2->num < p->num) //插入链表尾部

    {

        p2->next = p;

        p->next = 0;

    }

    else //插入p1,p2之间

    {

        p1->next =p;

        p->next = p2;

    }

    return head;

}

 

students_t* sort_create(int chain)

{

    students_t *head,*p1;

    head = 0;

    int num,score;

     

    while(chain)

    {

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

        p1 = (students_t*)malloc(sizeof(students_t));

        p1 ->num = num;

        p1 ->score = score;

        head = insert(head,p1);//链表数据按照升序一个个插入

        chain--;

    }

    return head;  

}

 

void print(students_t* head)

{

    students_t* p1;

    p1 = head;

    while(p1 != 0)

    {

        printf("%d %d\n",p1 ->num,p1->score);

        p1 = p1 -> next;

    }

    if(head == 0)

    {

        printf("This link list is empty!\n");

    }

}

 

void deletechain(students_t* head)

{

    students_t* p1;

    while(head)

    {

        p1 = head;

        head = head->next;

        free(p1);

    }

}


 

0.0分

0 人评分

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

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区