• 已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并。按学号升序排列.


    #include <stdio.h>
    #define SIZE sizeof(struct student)
    struct student
    {
           long num;
           float score;
           struct student *next;
    };

    struct student * create();
    struct student * input();
    void print(struct student *);
    struct student * union_linktable(struct student *,struct student *);
    struct student * insert(struct student *,struct student *);
    int main(int argc,char *argv[])
    {
        struct student *head1,*head2;
        printf("please input linktable1: ");
        head1 = (struct student *)create();
        printf("the lintable1 data is ");
        print(head1);
        printf("please input linktable2: ");
        head2 = (struct student *)create();
        printf("the lintable2 data is ");
        print(head2);
        printf("union linktable1 and linktable2: ");
        head1 = union_linktable(head1,head2);
        print(head1);
        system("pause");
        return 0;
    }

    struct student * create()
    {
           int n = 0;
           struct student *head;
           struct student *p1,*p2;
           head = NULL;
           do 
           {
              p1 = input();
              if (0 == p1->num)
              {
                 break;
              }
              else
              {
                  if (0 == n)
                  {
                     head = p1;
                  }
                  else
                  {
                      p2->next = p1;
                  }
                  p2 = p1;
                  n++;
              }
           }while(1);
           p2->next = NULL;
           return head;
    }

    struct student * input()
    {
           struct student *p;
           p = (struct student *)malloc(SIZE);
           printf("please input num,score:");
           scanf("%ld,%f",&p->num,&p->score);
           return p;
    }

    void print(struct student *head)
    {
         struct student *p;
         p = head;
         if (head != NULL)
         {
            do
            {
              printf("num:%ld,score:%5.1f ",p->num,p->score);
              p = p->next;
            }while(p != NULL);
         }
         else
         {
             printf("error:linktable data is NULL. ");
         }
    }

    struct student * union_linktable(struct student *head1,struct student *head2)
    {
           struct student *pa1,*pa2,*pb1,*pb2;
           pa1 = pa2 = head1;
           pb1 = pb2 = head2;
           do
           {
             while ((pb1->num > pa1->num) && (pa1->next) != NULL)
             {
                   pa2 = pa1;
                   pa1 = pa1->next;
             }
             if (pb1->num <= pa1->num)
             {
                if(head1 == pa1)
                {
                         head1 = pb1;
                }
                else
                {
                    pa2->next = pb1;
                }
                pb2->next = pa1;
                pa2 = pb2;
                pb2 = pb1;
             }
           }while((pa1->next != NULL) || (pa1 == NULL && pb1 != NULL));
           if ((pb1 != NULL) && (pb1->num > pa1->num) &&(pa1->next == NULL))
           {
              pa1->next = pb1;
           }
           return head1;
    }

    struct student *insert(struct student *head,struct student *stu)
    {
           
           struct student *p0,*p1,*p2;
           p1 = head;
           p0 = stu;
           if(NULL == head)
           {
                   head = p0;
                   p0->next = NULL;
                   
           }
           else
           {
               while (p0->num > p1->num && p1->next != NULL)
               {
                     p2 = p1;
                     p1 = p1->next;
               }
               if (p0->num <= p1->num)
               {
                  if (p1 == head)
                  {
                     head = p0;
                  }
                  else
                  {
                      p2->next = p0;
                  }
                  p0->next = p1;
               }
               else
               {
                   p1->next = p0;
                   p0->next = NULL;
               } 
           }
           return head;
    }

  • 相关阅读:
    Ubuntu18.04安装RTX2080Ti+NVIDIA驱动+CUDA
    G++ 编译多个源文件
    线段树【递归版本】
    Linux 安装 python 指定版本--编译源码方式
    正则表达式高级替换
    【转载】Git忽略规则和.gitignore规则不生效的解决办法
    一次“惊险”的系统修复过程
    YOLO模型对图片中车辆的识别比对
    YOLOv3模型识别车位图片的测试报告(节选)
    在windows下用python调用darknet的yolo接口
  • 原文地址:https://www.cnblogs.com/aspirant/p/4028294.html
Copyright © 2020-2023  润新知