• 两个有序链表合并算法


    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>

    typedef struct LNode{//指向结构体成员 必然是结构体指针
      int data;
      struct LNode *next;

    }LNode,*LinkList;
     

    void InitList(LinkList &L){//构造空线性表L
       L = (LinkList)malloc(sizeof(struct LNode));//产生头结点 L
       if(!L)//存储分配失败
          exit(0);
       L -> next = NULL; //头结点指针域为空
    }
    void CreateList(LinkList &La,LinkList &Lb){
     int i;
     int a[3] = {4,7,11} ;
     int b[3] = {3,6,9};
        LinkList pnew,pa,pb;
     pb = Lb;
     pa = La;
      
     for(i=0; i < 3; i++){
      
          pnew = (LinkList)malloc(sizeof(LNode)) ;
          pnew -> data =a[i];
          pnew->next = NULL;
          pa ->next = pnew;
          pa = pnew;
        
       
         }
     for(i=0; i < 3; i++){
      
          pnew = (LinkList)malloc(sizeof(LNode)) ;
          pnew -> data =b[i];
          pnew->next = NULL;
          pb ->next = pnew;
          pb = pnew;
        
       
         }

    }


    //将b集合元素依次取出 存放在临时变量pb1 中依次插入a集合中
    void merg(LinkList &La,LinkList Lb)

    LinkList pa,pb,pa1,pb1;
    int e;
    pa = La;//内存循环
    pb = Lb;//外层循环
    pa1 = La;
    pb1 = Lb;//取出b集合中的元素,存放在pb1中
    pb = pb ->next;//pb第一次循环指向第一个元素

    while(pb)
    {  pb1 = pb;
      
      
       e = pb1 ->data;
       //printf("%d",e);
       pb = pb ->next;
      
      while(pa)
       {
       pa1 = pa;//记取pa结点
       pa = pa ->next;//获取pa下一个结点
       //printf("%d",pa->data);
       if(e <= pa ->data)//符合小于pa结点元素的条件插入
       {
        pb1 ->next = pa;//存取当前b元素的结点临时变量pb1 next  指向当前pa
        pa1 ->next = pb1;//pa1为当前pa的上一个结点 他指向pb1
        pa = La; //插入成功后 pa为头结点 退出循环 寻找b集合第二个元素
        break;
       
       
       }
       if(pa == NULL)//当b集合某个元素大于a集合所有元素 插入末尾结点
       {
          pa ->next = pb1;
       pb1 ->next =NULL;
       pa = La;
       }
       
       
       }

    }


    }
    void output(LinkList L){
     
     L = L->next;
     while(L){
      printf("%d ",L->data);
       L =  L->next;
     
     }
    }

    void DestroyList(LinkList &L){
       LinkList q;
       while(L){
         q = L -> next;
         free(L);
         L = q;
    }

    }
    int main(){
     LinkList La,Lb;
     InitList(La);
     

     InitList(Lb);
     CreateList(La,Lb);
     merg(La,Lb);
     output(La);
     //DestroyList(La);
     DestroyList(Lb);

     return 0;

    }

    每个人的强大都是从弱小开始慢慢积累起来的!!
  • 相关阅读:
    Redis线程模型理解
    策略模式
    Spring Cloud 5大组件介绍
    单例模式
    hotspot虚拟机的调试
    编译虚拟机jvm——openjdk的编译
    mybatis的搭建和注入spring的方式
    springMvc+hibernate的web application的构建
    关于本博客
    本博客已停更
  • 原文地址:https://www.cnblogs.com/gaoanchen/p/3252160.html
Copyright © 2020-2023  润新知