king


私信TA

用户名:dotcpp0651761

访问量:2839

签 名:

等  级
排  名 5683
经  验 1506
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 华南师范大学
专  业

  自我简介:

TA的其他文章

解题思路:

1、定义结构体(根据题干定义即可)

2、创建链表函数

3、输出链表函数

4、链表排序:

    先讲两个链表合为一个链表,再通过选择排序的方式将链表重新排序

注意事项:

    在合并原理原重新创建指针头,每次从原指针中挑出num最小的指针插入新指针中,如果原指针num最小为头指针,则需让a=a->next,反之丢失元素。

参考代码:

struct Linklist1052{

     int num;

     int score;

     struct Linklist1052 *next;

};

struct Linklist1052 *create(int n){

     struct Linklist1052 *p1,*p2;

     struct Linklist1052 *head;

     head=NULL;

     p1=p2=(struct Linklist1052 *)malloc(sizeof(struct Linklist1052));

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

          scanf("%d %d",&p1->num,&p1->score);

          if(i==0){

          head=p1;

     }else{

          p2->next=p1;

     }

          p2=p1;

          p1=(struct Linklist1052 *)malloc(sizeof(struct Linklist1052));

     }

         p2->next=NULL;

         return head;

}

void print1052(struct Linklist1052 *head){

    struct Linklist1052 *p;

    p=head;

    if(head!=NULL){

        while(p!=NULL){

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

            p=p->next;

        }

    }

}

struct Linklist1052* pai1052(struct Linklist1052 *a,struct Linklist1052 *b,int n,int m){

    struct Linklist1052 *p,*q,*head,*min,*minq,*newp;

    head=NULL;

    p=a;

    while(p->next!=NULL){

        p=p->next;

    }

    p->next=b;//连接两个链表 

    q=min=p=a;//初始化指针

    for(int i=0;i<n+m;i++){//外层循环执行次数

        p=a;//执行完一轮后p指针回到起点

        q=minq=min=p;

        while(p!=NULL){//寻找num最小指针

            if(min->num>p->num){

                min=p;

                minq=q;

            }

            q=p;

            p=p->next;

        }

        //首位最小则起始点改变 

        if(min==a){

            a=a->next;

        } 

        //解绑

        minq->next=min->next; 

         if(i==0){

             head=min;

         }else{

             newp->next=min;

         }

        newp=min;

    }

    newp->next=NULL;

    return head;

}

int main(){

     struct Linklist1052 *a,*b,*ab;

     int n,m;

     scanf("%d",&n);

     scanf("%d",&m);

     a=create(n);

     b=create(m);

     ab=pai1052(a,b,n,m);

     print1052(ab);


 

0.0分

0 人评分

  评论区

  • «
  • »