HzuCZN


私信TA

用户名:0309

访问量:8794

签 名:

等  级
排  名 102
经  验 8420
参赛次数 6
文章发表 12
年  龄 0
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

算法极差,要哭了0.0.。。。。。。

解题思路:
        1.输入

        2.创建a链表

        3.输出a链表看一下输入对不对


        4.创建b链表

        5.输出b链表看一下输入对不对

        6.连接a,bl链表

        7.冒泡排序

        8.输出连接后的整个链表+释放链表

如有错误请包涵(第一次发这么认真的题解)我是小白呀,呀呀!逃~

注意事项:

参考代码:

#include<stdio.h>
#include<stdlib.h>  //  malloc函数的头文件 
typedef struct node
{
 int id;
 int score;
 struct node* next;//存放下一个节点(类型为 node )的地址,所以指针类型为 node 
}Node;
int main()
{
      int n,m; 
      Node *p , *p1 , *p2 , *head1 , *head2 , *q1 , *q2; 
            /* 
              p是存放链表 动态创建的node类型节点的地址 
              head是存放链表的首地址
              q是指向当前节点的地址 
          */ 
      scanf("%d%d",&n,&m); //输入两个链表分别有多少个节点 
      
      p1 = (Node*)malloc(sizeof(Node));        // 动态生成一个首节点(node类型的结构体) 
                                                       //并把节点的地址赋值给p1,及p1指向首节点 
                   
      head1 = p1;                              //把首节点的地址放给head1只要通过head1就可以遍历a链表 
      
      q1 = p1;                                 // q1指向当前节点    
      
      scanf("%d%d",&p1->id,&p1->score);//输入学号  成绩 
      
      p1->next = NULL;                //把p1的next 指针赋空(相当于标记   便于链表的遍历)
        
      for(int i = 1;i < n ; i++){           //动态生成n-1个节点 (前面已经创建了一个) 
      p1 = (Node*)malloc(sizeof(Node));    //动态生成一个节点(node类型的结构体)并把节点的地址赋值给p1
      
       scanf("%d%d",&p1->id,&p1->score);        //输入学号  成绩 
       
       p1->next = NULL;                //把p1的next 指针赋空(相当于标记   便于链表的遍历)
       
       q1->next = p1;     //首先要明确此时q1指向的是当前的节点,而p1指向的是新创建的节点,
                         //要想使新的节点连接到之前的链表中, 
                        //只要把p1(新的节点的地址)的地址赋值给q1(当前节点的地址)的next(指向下一个节点的地址),
                                   //即q1指向新节点(新节点与之前的那一段链表连接上了) 
            
       q1 = p1;                    //因为新节点连接成功所以,新节点是变成了当前节点,
                                  //所以把新节点的地址(p1)赋值给q1(始终指向当前节点)
         
      }
      /* 
      p=head1;
      cout<<"1*****"<<endl;
      while(p!=NULL){
            printf("%d %d\n",p->id,p->score);
           p=p->next;               //这是一段链表输出的代码,看一下链表生成的对不对 
      }
      cout<<"1*****"<<endl;
      */
      p2 = (Node*)malloc(sizeof(Node));                //跟上面的是一样的所以就偷懒了
      head2 = p2;
      q2 = p2;         
      scanf("%d%d",&p2->id,&p2->score);
      p2->next = NULL; 
      for(int i = 1 ; i < m ; i++){
           p2 = (Node*)malloc(sizeof(Node));
           scanf("%d%d",&p2->id,&p2->score);
           p2->next = NULL;
           q2->next = p2;
           q2 = p2;  
      }
      /* 
      p=head2; 
      cout<<"2*****"<<endl;
      while(p!=NULL){   
           printf("%d %d\n",p->id,p->score);
           p=p->next;
      }
      cout<<"2*****"<<endl;
      */     //跟上面的是一样的所以就偷懒了  
      
      q1->next = head2;             //要想连接两链表只需要把 b 链表 的指针赋值给 a链表
                                   //最后一个节点中的next指针(next指向了b链表,这样就连接成功了)
          
      // 链表的排序--冒泡排序    
      p1 = head1;  
      p2 = head1;
      int t;
      for(int i = 1 ; i < n+m ; i++){
            for(int j = 1 ; j <= n+m-i ; j++){
            p2 = p2->next;                  //没做一次就指向下一个节点有点像冒泡里面的 j++; 
            if(p1->id>p2->id){             //当p1指向的学号大于p2指向的学号则交换   
            
                 t = p2->id;
                 p2->id = p1->id;              //交换学号 
                 p1->id = t;
         
                 t = p2->score;
                 p2->score = p1->score;        //交换成绩 
                 p1->score = t;
             }
       }
       p1 = p1->next;                      //没做一次就指向下一个节点有点像冒泡里面的 i++; 
       p2 = p1;                           //使p2指针前移 
      } 
      //链表输出   +   链表释放 
      p = head1;  
      Node *h;                            //释放节点的指针 
      while(p != NULL){   
           printf("%d %d\n",p->id,p->score); //输入学号  成绩 
           h = p;         
           p = p->next;                      //当把p的地址赋值给h指针后,指向下一个节点   
           free(h);                          //释放h节点(此时p的上一个节点) 
      }
     return 0;
    }

-------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------

无注释

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
 int id;
 int score;
 struct node* next;
}Node;
int main()
{
 int n,m; 
 Node *p,*p1,*p2,*head1,*head2,*q1,*q2;
 
 scanf("%d%d",&n,&m);
 
 p1 = (Node*)malloc(sizeof(Node));
 
 head1 = p1;
 
 q1 = p1;
 scanf("%d%d",&p1->id,&p1->score);
 
 p1->next = NULL; 
 
 for(int i = 1 ; i < n ; i++){
  
  p1 = (Node*)malloc(sizeof(Node));
  
  scanf("%d%d",&p1->id,&p1->score);
  
  p1->next = NULL;
  
  q1->next = p1;
  
  q1 = p1;  
 }
 p2 = (Node*)malloc(sizeof(Node));
 
 head2 = p2;
 
 q2 = p2;
 
 scanf("%d%d",&p2->id,&p2->score);
 
 p2->next = NULL; 
 
 for(int i=1;i<m;i++){
  
   p2 = (Node*)malloc(sizeof(Node));
   scanf("%d%d",&p2->id,&p2->score);
   p2->next = NULL;
   q2->next = p2;
   q2 = p2;  
 } 
 q1->next=head2;
 p1 = head1;
 p2 = head1;
 int t;
 for(int i = 1 ; i < n+m ; i++){
   for(int j = 1;j <= n+m-i ; j++){
    
     p2 = p2->next;
     
     if(p1->id > p2->id){
      t = p2->id;
      p2->id = p1->id;
      p1->id = t;
    
      t = p2->score;
      p2->score = p1->score;
      p1->score = t;
     }
   }
   
   p1=p1->next;
   p2=p1;
 } 
 p = head1;
 Node *h; 
 while(p != NULL){ 
   
   printf("%d %d\n",p->id,p->score);
   h = p;
   p = p->next;
   free(h);
 }
 return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »